아무거나

[Design Pattern] State Pattern 본문

Java & Kotlin/Java

[Design Pattern] State Pattern

전봉근 2020. 1. 10. 00:25
반응형

상태 패턴(State Pattern)

일련의 규칙에 따라 객체의 상태(State)를 변화시켜, 객체가 할 수 있는 행위를 바꾸는 패턴이다.

 

 

어떤 Context라는 객체가 State을 가지고 있고, 그리고 Concrete인 StateA와 StateB가 있고 그거에 대한 어떠한 액션을 취하게 된다. 그 액션을 취한 것이 상태에 영향을 주게 된다.

상태 패턴 예시 - 1

불을 키고 끄는 예제를 만들자.

불을 켜고 끌 수 있는 Light 클래스를 생성
[Light.java]

package com.bkjeon.state;

public class Light {

    protected LightState lightState;

    private LightState offState = new LightState() {
        @Override
        public void on() {
            // 꺼져 있는 상태에서 불을 켜있는 상태로 상태값을 변경
            System.out.println("Light ON");
            lightState = onState;
        }

        @Override
        public void off() {
            // 처음에 꺼져 있는 상태이므로 Nothing
            System.out.println("Nothing");
        }
    };

    private LightState onState = new LightState() {
        @Override
        public void on() {
            // 처음에 켜져 있는 상태이므로 Nothing
            System.out.println("Nothing");
        }

        @Override
        public void off() {
            // 켜져 있는 상태에서 불을 꺼있는 상태로 상태값을 변경
            System.out.println("Light OFF");
            lightState = offState;
        }
    };

    public Light() {
        lightState = offState;
    }

    public void on() {
        lightState.on();
    }

    public void off() {
        lightState.off();
    }

}

// 상태를 가지고 있어야 하므로 구현
interface LightState {
    void on();
    void off();
}

메인 클래스 작성
[Main.java]

package com.bkjeon.state;

public class Main {

    public static void main(String[] args) {
        Light light = new Light();

        light.off();
        light.off();
        light.off();

        light.on();
        light.on();
        light.on();

        light.off();
        light.on();
        light.off();
        light.on();
        light.off();
        light.on();
    }

}

실행결과

Nothing
Nothing
Nothing
Light ON
Nothing
Nothing
Light OFF
Light ON
Light OFF
Light ON
Light OFF
Light ON

전략패턴하고 비슷하지만 차이점이 있다.전략패턴은 알고리즘이 변경하는 거지만 상태패턴은 말 그대로 상태를 변경하는 것이다.

 

참고: https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard

반응형

'Java & Kotlin > Java' 카테고리의 다른 글

[Design Pattern] Flyweight Pattern  (0) 2020.01.12
[Design Pattern] Memento Pattern  (0) 2020.01.12
[Design Pattern] Mediator Pattern  (0) 2020.01.08
[Design Pattern] Observer Pattern  (0) 2020.01.05
[Design Pattern] Facade Pattern  (0) 2020.01.04
Comments