상태 패턴

개체의 내부 상태가 변경될 때 개체가 동작을 변경하도록 허용합니다. 개체가 클래스를 변경하는 것처럼 보입니다.



참가자들


  • 컨텍스트: 클라이언트가 관심 있는 인터페이스를 정의합니다.
    현재 상태를 정의하는 ConcreteState 서브클래스의 인스턴스를 유지합니다.
  • 상태: 컨텍스트의 특정 상태와 관련된 동작을 캡슐화하기 위한 인터페이스를 정의합니다.
  • 구체적인 상태: 각 하위 클래스는 컨텍스트 상태와 관련된 동작을 구현합니다
  • .

    암호




    public class Main {
    
        public static void main(String[] args) {
            Context c = new Context(new ConcreteStateA());
            c.request();
            c.request();
            c.request();
            c.request();
        }
    }
    
    public interface State {
        void handle(Context context);
    }
    
    public class ConcreteStateA implements State {
    
        @Override
        public void handle(Context context) {
            context.setState(new ConcreteStateB());
        }
    }
    
    public class ConcreteStateB implements State {
    
        @Override
        public void handle(Context context) {
            context.setState(new ConcreteStateA());
        }
    }
    
    public class Context {
    
        private State state;
    
        public Context(State state) {
            setState(state);
        }
    
        public State getState() {
            return state;
        }
    
        public void setState(State state) {
            this.state = state;
            System.out.println("State: " + state.getClass().getSimpleName());
        }
    
        public void request() {
            state.handle(this);
        }
    }
    

    산출



    State: ConcreteStateA
    State: ConcreteStateB
    State: ConcreteStateA
    State: ConcreteStateB
    State: ConcreteStateA
    




    eidherjulian61 / 디자인 패턴








    좋은 웹페이지 즐겨찾기