[행위 패턴] State pattern (스테이트 패턴)
알고리즘의 개별 단계를 구현하는 방법을 서브클래스에서 결정한다.
(원본 출처 : https://www.tutorialspoint.com/design_pattern/design_pattern_quick_guide.htm)
상태 패턴에서 클래스 비헤이비어는 상태에 따라 변경됩니다. 이러한 유형의 디자인 패턴은 행동 패턴에 속합니다.
상태 패턴에서 우리는 다양한 상태를 나타내는 객체와 상태 객체가 변경 될 때 동작이 변하는 컨텍스트 객체를 만듭니다.
Implementation
우리는 액션을 정의하는 State 인터페이스와 State 인터페이스를 구현하는 구체적인 State 클래스를 생성 할 것입니다. 컨텍스트는 상태를 운반하는 클래스입니다.
StaePatternDemo, 우리 데모 클래스는 컨텍스트 및 상태 개체를 사용하여 컨텍스트 동작의 변경 내용을 상태 유형에 따라 보여줍니다.
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
'Development > Java' 카테고리의 다른 글
[디자인 패턴] Compound pattern (컴파운드 패턴) (0) | 2017.03.26 |
---|---|
[구조 패턴] Proxy pattern (프록시 패턴) (0) | 2017.03.26 |
[구조 패턴] Composite pattern (컴포지트 패턴) (0) | 2017.03.26 |
[행위 패턴] Iterator pattern (이터레이터 패턴) (0) | 2017.03.26 |
[구조 패턴] Facade pattern (퍼사드 패턴) (0) | 2017.03.26 |