Java Design Pattern - State Pattern

업데이트:

Design Pattern

  • 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것이다.
  • 디자인 패턴은 알고리즘이 아니라 상황에 따라 자주 쓰이는 설계 방법을 정리한 코딩 방법론일 뿐이며 모든 상황의 해결책이 아니다.

Behavioral Patterns, 행위 패턴

  • 객체간의 상호작용과 책임을 중시하는 패턴이다.
  • 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분배하면서 객체 사이의 결합도를 최소화하는 것에 중점을 두는 패턴이다.

State Pattern

  • 객체의 상태에 따라 객체의 행위 내용을 변경하게 해주는 패턴이다.

Example

public interface State {

  public void doAction(Context context);

}
public class StartState implements State {

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

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

}
public class StopState implements State {

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

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

}
  • 상태를 관리하기 위한 Status를 정의하고 시작과 정지를 구분하는 StartState, StopState 객체를 구현한다.
public class Context {

  private State state;

  public Context() {
    state = null;
  }

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

  public State getState() {
    return state;
  }

}

  • Context 객체는 State를 유동적으로 받아 동작하도록 구현된 객체이다.
public class StatePatternMain {

  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());
  }

}
  • Content 객체에 StartState와 StopState에 따라서 각각 상태가 변경되는 것을 확인 할 수 있다.

Source

Sample Code는 여기에서 확인 가능합니다.

댓글남기기