[행위 패턴] State pattern (스테이트 패턴)


알고리즘의 개별 단계를 구현하는 방법을 서브클래스에서 결정한다.

 

(원본 출처 : https://www.tutorialspoint.com/design_pattern/design_pattern_quick_guide.htm)

 

상태 패턴에서 클래스 비헤이비어는 상태에 따라 변경됩니다. 이러한 유형의 디자인 패턴은 행동 패턴에 속합니다.

상태 패턴에서 우리는 다양한 상태를 나타내는 객체와 상태 객체가 변경 될 때 동작이 변하는 컨텍스트 객체를 만듭니다.

 

Implementation

우리는 액션을 정의하는 State 인터페이스와 State 인터페이스를 구현하는 구체적인 State 클래스를 생성 할 것입니다. 컨텍스트는 상태를 운반하는 클래스입니다.

StaePatternDemo, 우리 데모 클래스는 컨텍스트 및 상태 개체를 사용하여 컨텍스트 동작의 변경 내용을 상태 유형에 따라 보여줍니다.

State Pattern UML Diagram

Step 1

인터페이스를 생성합니다.

Image.java

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

Step 2

같은 인터페이스를 구현하는 구체적인 클래스를 작성합니다.

StartState.java

public class StartState implements State {

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

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

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";
   }
}

Step 3

Context 클래스를 생성합니다.

Context.java

public class Context {
   private State state;

   public Context(){
      state = null;
   }

   public void setState(State state){
      this.state = state;		
   }

   public State getState(){
      return state;
   }
}

Step 4

컨텍스트를 사용하여 상태가 변경 될 때의 동작 변화를 확인합니다.

StatePatternDemo.java

public class StatePatternDemo {
   public static void main(String[] args) {
      Context context = new Context();

      StartState startState = new StartState();
      startState.doAction(context);

      System.out.println(context.getState().toString());

      StopState stopState = new StopState();
      stopState.doAction(context);

      System.out.println(context.getState().toString());
   }
}

Step 5

결과를 확인합니다.

Player is in start state
Start State
Player is in stop state
Stop State
Posted by kunoo
,