[자바 디자인패턴 소스코드] State Pattern

 

상태 패턴

 


/**
 * 디자인패턴 - 스테이트 패턴
 * 스테이트 패턴은 상태에 따라 동일한 작업이 다른 방식으로 실행될 때
 * 해당 상태가 작업을 수행하도록 위임하는 디자인 패턴이다.
 */
public class StatePattern {
    public static void main(String[] args) {
        TV tv = new TV();
        tv.turn_on();
        tv.turn_off();
        tv.turn_off();
        tv.turn_on();
        tv.turn_off();
    }
}

interface State {
    public void turn_on(TV tv);
    public void turn_off(TV tv);
}

class TV {
    private State state;

    public TV() {
        state = OFF.getInstance();
    }

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

    public void turn_on() {
        state.turn_on(this);
    }

    public void turn_off() {
        state.turn_off(this);
    }
}

class ON implements  State {
    private static ON on = new ON();
    private ON(){}

    public static ON getInstance() {
        return on;
    }

    public void turn_on(TV tv) {
        System.out.println("-");
    }

    public void turn_off(TV tv) {
        System.out.println("TV Off!");
        tv.setState(OFF.getInstance());
    }
}
class OFF implements State {
    private static OFF off = new OFF();
    private OFF(){}

    public static OFF getInstance() {
        return off;
    }

    public void turn_on(TV tv) {
        System.out.println("TV On!");
        tv.setState(ON.getInstance());
    }

    public void turn_off(TV tv) {
        System.out.println("-");
    }
}

 

 

이 글을 공유하기

댓글

Designed by JB FACTORY