상태 모드 개선
표준적 인 상태 모드 입 니 다. 그 중에서 Context 는 모든 상 태 를 관리 하고 모든 상 태 는 자신의 클래스 이 며 상태의 유전 논 리 는 상태 에서 스스로 실 행 됩 니 다.
그 다음 에 완전한 상태 모델 은 너무 '무 거 운' 것 을 실현 하고 상태 유통 에 대한 묘 사 는 코드 에 있어 서도 한눈 에 알 수 없 기 때문에 저 는 상태 모델 을 간소화 하고 최적화 시 켰 습 니 다. 이 를 '가 벼 운' 것 으로 사용 하기 쉽 고 실현 하기 쉬 우 며 상태 흐름 이 코드 에 있어 서도 한눈 에 알 수 있 습 니 다. 모든 유통 논 리 는 한 화면 에 나타 날 수 있 습 니 다.
먼저 재 최적화 후의 상태 모델 에 대한 개념 을 소개 한다.
코드https://github.com/zephyrleaves/easy-state
우 리 는 예 를 하나 보면 그 가 어떻게 쓰 는 지 알 수 있다.
우선 이벤트 이 벤트 를 정의 합 니 다.
public enum OrderEvent implements Event{//
DO,
//
DONE;
@Override public String getName() {
return name();
}
}
이 벤트 는 실제 적 으로 매 거 진 것 으로 일련의 상태 와 관련 된 사건 을 열거 한 것 을 볼 수 있다.
그리고 저희 가 상 태 를 정 해 보도 록 하 겠 습 니 다.
public enum OrderState implements State {@Next(arc = {“DO->END”, “DONE->END”})
INIT,
@Next()
TEST,
END;
@Override public int getValue() {
return ordinal();
}
@Override public String getOrginName() {
return name();
}
@Override public OrderState getStateByName(String name) {
return valueOf(name);
}
}
State 자체 도 매 거 진 것 을 볼 수 있 습 니 다. 다른 것 은 상태 상 @ Next 와 같은 annotation 이 상태 흐름 의 논 리 를 묘사 하 는 것 입 니 다.
예 를 들 어 INIT 의 @ Next 는 현재 DO 라 는 이벤트 가 발생 하면 현재 상 태 는 END 로 넘 어 가 는 것 임 을 나타 낸다.
마지막 으로 연 결 된 실행 결 과 를 보 겠 습 니 다.
public class StatusTest {@org.testng.annotations.BeforeTest
public void setUp() {
}
@Test
public void testConstuructor() {
Status status = new Status(OrderState.INIT); // INIT
Assert.assertEquals(OrderState.valueOf(“INIT”), status.getCurrentState());
}
@Test
public void testHappen() {
Status status = new Status(OrderState.INIT); // INIT
Assert.assertEquals(OrderState.INIT, status.getCurrentState());
HappenedResult result = status.happen(OrderEvent.DO); // DO
Assert.assertEquals(result, HappenedResult.SUCCESS); //
Assert.assertTrue(result.isSuccess());
Assert.assertEquals(status.getCurrentState(), OrderState.END); // END
Assert.assertEquals(status.getPreviousState(), OrderState.INIT); // INIT
HappenedResult result1 = status.happen(null); //
Assert.assertEquals(result1, HappenedResult.NO_EVENT); //
Assert.assertEquals(status.getCurrentState(), OrderState.END); // END
Assert.assertEquals(status.getPreviousState(), OrderState.INIT); // INIT
HappenedResult result2 = status.happen(OrderEvent.DONE); // DONE
Assert.assertEquals(result2, HappenedResult.NO_NEXT); // DONE
Assert.assertEquals(status.getCurrentState(), OrderState.END); // END
Assert.assertEquals(status.getPreviousState(), OrderState.INIT); // INIT
Status status1 = new Status(OrderState.TEST); // TEST
HappenedResult result3 = status1.happen(OrderEvent.DO); // DO
Assert.assertEquals(result3, HappenedResult.NO_ARC); //
Assert.assertEquals(status1.getCurrentState(), OrderState.TEST); // TEST
Assert.assertEquals(status1.getPreviousState(), null); //
}
}
2012, 타 오 바 오 문 통. 판권 소유.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.