디자인 패턴 - 상태 모드의 행동 패턴 (E)

주 모드

모드 상태 (주 패턴), 클래스의 동작 상태 변화를 기반으로합니다. 디자인 패턴이 유형의 행동 패턴을 속한다.

상태 모델에서, 우리는 객체의 상태가 변경 될 때 컨텍스트 오브젝트가 다양한 개체의 행동과 변화의 상태를 나타냅니다 만들 수 있습니다.

소개

의도 : 내부 상태가 변경 될 때 객체가 동작을 변경할 수 있으며, 객체는 클래스를 수정 나타납니다.

메인 용액 : 오브젝트의 동작 상태 (특성)에 따라, 그 연관된 상태에 기초하여 그 동작을 변경하도록 변경 될 수있다.

때 사용 : 코드는 객체의 상태에 대한 조건문의 수를 포함합니다.

해결 방법 : 특정 상태 클래스 초록의 다양성.

키 코드 : 한 방향으로 만 인터페이스는 일반적으로 명령 모드입니다. 하나 이상의 인터페이스 상태 모드의 더 동안. 또한, 클래스의 메소드 실행 상태 모드, 보통 리턴 값 또는 인스턴스 변수의 값을 변화. 즉, 상태 객체 모델의 상태는 일반적으로 관련된다. 구현 클래스의 방법은 다른 기능 인터페이스를 커버하는 방법이있다. 주 모드와 명령 모드 또한 다른 조건의 경우 ... 다른 선택 문을 제거하기 위해 사용되는 동일 한 수 있습니다.

적용 예 :  1, 재생 농구 선수, 정상 이상하고 특별한 상태 상태를 가지고있다. 2 편종은 '시계 A' '시계 추상적 인터페이스'및 구체적 상태처럼 "편종의 특정 환경 (컨텍스트).

장점 :  1, 변환 규칙 패키지. 2, 가능한 상태를 열거 열거하기 전에 상태에서 종의 상태를 확인해야합니다. 3, 클래스에 상태 관련 행동과 모든, 당신은 쉽게 새로운 상태를 추가 할 수 있습니다 만 개체의 동작을 변경할 수있는 객체의 상태를 변경해야합니다. 도 4는, 오히려 하나 개의 거대한 조건문 블록보다는, 하나의 개체의 상태 천이 논리 상태를 허용한다. 도 5를 참조하면, 환경은 여러 객체함으로써 시스템의 개체 수를 줄일 수있는 상태 객체를 공유 할 수있다.

단점 :  1, 상태 모델 시스템을 사용 필연적 클래스와 객체의 수를 증가. (2) 구조와 상태 모델의 구현은 다소의 구조 및 프로그램 코드를 초래할 것이다 잘못 사용되는 경우, 더 복잡하다. 3, "개폐 원리"에 대한 상태 모드 지원은 새로운 클래스가 상태 전환에 대한 책임이있는 사람들의 소스 코드 상태를 수정해야 추가 모드의 상태가 상태를 전환 할 수 있습니다 매우 좋지 않다, 또는 새로운 상태로 전환하고, 수정할 수 없습니다 클래스에 해당하는 클래스의 동작 상태는 소스 코드를 수정해야합니다.

사용 시나리오 :  1, 변화 행동과 장면의 변화 상태에 따라. 2, 조건, 대신 switch 문에 의해.

참고 : 사용 상태 모드 때의 상태에 의해 제약의 동작 및 상태를 더 이상 오보다.

실현

우리는 만듭니다  국가  의 인터페이스 및 구현   엔터티 상태 클래스 인터페이스를. 컨텍스트  상태와 클래스입니다.

StatePatternDemo는 , 우리의 데모 클래스는 사용  컨텍스트  컨텍스트 상태 변화에서 행동의 변화를 설명하고 상태 개체를.

도 UML 상태 패턴.

1 단계

인터페이스를 만듭니다.

State.java

공용 인터페이스 상태 {
   공공 무효 doAction (컨텍스트 컨텍스트);
}

2 단계

인터페이스를 구현하는 엔티티 클래스를 생성.

StartState.java

공용 클래스 StartState 구현 주 {

   공공 무효 doAction (컨텍스트 컨텍스트) {
      에서 System.out.println이 ( "플레이어가 시작 상태에있다");
      context.setState (이);
   }

   공공 문자열 toString () {
      반환 "시작 상태";
   }
}

StopState.java

공용 클래스 StopState 구현 상태 {

   공공 무효 doAction (컨텍스트 컨텍스트) {
      에서 System.out.println는 ( "Player는 정지 상태에있다");
      context.setState (이);
   }

   공공 문자열 toString () {
      반환 "정지 상태";
   }
}

3 단계

만들기  컨텍스트  클래스를.

Context.java

공용 클래스 컨텍스트 {
   개인 주 상태;

   공용 컨텍스트 () {
      상태 = NULL;
   }

   공개 무효 setState를 (주 상태) {
      this.state = 상태;    
   }

   공공 국가의 getState () {
      반환 상태;
   }
}

4 단계

사용  컨텍스트  때 상태보기로  상태  변화 할 때 행동 변화를.

StatePatternDemo.java

Public 클래스 StatePatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {
      문맥 상황 = 새로운 컨텍스트 ();

      StartState startState = 새로운 StartState ();
      startState.doAction (컨텍스트);

      에서 System.out.println (context.getState의 toString () ().);

      StopState stopState = 새로운 StopState ();
      stopState.doAction (컨텍스트);

      에서 System.out.println (context.getState의 toString () ().);
   }
}

5 단계

프로그램 출력의 구현 :

플레이어 입니다 시작 상태 시작 플레이어 입니다 정지 상태 정지 상태       

추천

출처www.cnblogs.com/yuexiaoyun/p/11879652.html