Latest web development tutorials

주 패턴

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

상태 모델에서는 개체와 개체 변경 변경된 콘텍스트 객체 표현의 상태에 따라 행동 상태의 다양한 만든다.

소개

의도 : 오브젝트는 클래스를 수정하는 표시 객체가 내부 상태에서의 동작이 변경 변경할 수 있습니다.

개체의 행동이 상태 (특성)에 따라, 당신은 상태 관련 행동 변화에 따라 변경할 수 있습니다: 주로 해결합니다.

때 사용하기 : 코드 조건문의 상태와 관련된 많은 수의 개체가 포함되어 있습니다.

해결 방법 : 특정 클래스 추상적 인 아웃의 상태를 표시합니다.

키 코드 : 보통 명령 모드 인터페이스 하나의 방법.하나 이상의 방법을 갖는 인터페이스의 상태. 또한, 구현 클래스 상태 모드, 보통 리턴 값, 또는 상기 방법은 인스턴스 변수의 값을 변경. 즉, 상태 객체 모델의 상태는 일반적으로 적합하다. 구현 클래스 메서드는 다른 기능, 인터페이스 메소드가 덮여있다. 상태 모드와 같은 명령 모드는 다른 조건이 있다면 ... 다른 선택 문을 제거하는데 사용될 수있다.

적용 예 : 1, 농구 선수를 재생하는 정상 상태가 아닌 통상 상태와 이상 상태를 가질 수있다.2, 쩡 종소리의 후작 이순신은 '시계 A'및 기타 특정 상태 '편종'특정 환경 (컨텍스트) '시계 추상 인터페이스입니다'.

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

단점 : 1, 사용 상태 패턴은 시스템 클래스 및 객체의 수를 증가시킬 수밖에 없다.(2) 구조 및 상태 패턴의 구현은 다소의 프로그램 구조 및 코드를 발생할 수 잘못 사용되는 경우 더욱 복잡하다. 3 주 패턴 "개방 - 폐쇄 원칙"에 대한 지원이 매우 좋지 않다, 소스 코드의 상태 천이에 대한 책임이있는 사람들의 상태를 수정하는 새로운 클래스 추가 상태 모델의 상태를 필요로 전환하거나 새로운 상태로 전환 할 수 있고, 수정 상태 클래스 행위는 해당 클래스의 소스 코드를 수정해야한다.

사용 시나리오 : 1, 상태 변화 행동과 장면의 변화.2, 조건 분기 문을 대체.

주 : 상태 모드에 의해 제한된 상태로 동작을 이용하여 상태 5 개 이상이 아닌 경우.

실현

우리는국가엔티티 상태 인터페이스와 구현 클래스상태인터페이스를 생성합니다.컨텍스트는특정 상태와 클래스입니다.

StatePatternDemo,우리는 변화의 상태에서 동작의 변경을 설명하기 클래스 상태컨텍스트 콘텍스트객체의 사용을 입증한다.

주 패턴 UML 다이어그램

1 단계

인터페이스를 만듭니다.

State.java

public interface State {
   public void doAction(Context context);
}

2 단계

인터페이스를 구현 엔티티 클래스를 만듭니다.

StartState.java

공용 클래스 StartState는 상태 {구현

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

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

StopState.java

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);	
   }

   public String toString(){
      return "Stop State";
   }
}

3 단계

상황에 맞는클래스를 만듭니다.

Context.java

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

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

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

   공개 상태의 getState () {
      상태를 반환;
   }
}

4 단계

상태가상태 변경을변경하면 동작을 볼컨텍스트를 사용합니다.

StatePatternDemo.java

공용 클래스 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 단계

출력을 확인합니다.

플레이어 시작 상태에
시작 상태
플레이어가 정지 상태에있을
정지 상태