Design Pattern/행위 패턴

State Pattern

  • 어떤 행위를 수행할 때 상태에 행위를 수행하도록 위임
  • 시스템의 각 상태를 클래스로 분리해 표현
  • 각 클래스에서 수행하는 행위들을 메서드로 구현
  • 외부로부터 캡슐화하기 위해 인터페이스를 생성하여 시스템의 각 상태를 나타나는 클래스로 실체화

시작과 정지라는 상태로 하는 간단한 예제

 

1. 상태 인터페이스

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

 

2. 상태별 구현 클래스

public class StartState implements State{
    @Override
    public void doAction(Context context) {
        System.out.println("start");
        context.setState(this);
    }

    @Override
    public String toString() {
        return "StartState";
    }
}
public class StopState implements State{
    @Override
    public void doAction(Context context) {
        System.out.println("stop");
        context.setState(this);
    }

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

 

3. context

public class Context {
    private State state;

    public Context() {
        this.state = null;
    }

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

    public State getState() {
        return state;
    }
}

 

4. 실행 & 결과

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

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

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

'Design Pattern > 행위 패턴' 카테고리의 다른 글

Template Method Pattern  (0) 2021.06.24
Strategy 전략 프로젝트에 적용 해보기  (0) 2021.05.28
Command Pattern  (0) 2021.05.12
Strategy Pattern  (0) 2021.05.06