状态模式学习笔记

182 阅读1分钟
/**
 * 电视遥控器
 */
public interface TvState {
    /**
     * 音量调高
     */
    void turnOn();

    /**
     * 音量调低
     */
    void turnOff();

    /**
     * 下一个频道
     */
    void nextChannel();

    /**
     * 上一个频道
     */
    void preChannel();
}

/**
 *  关机状态下的行为实现
 * @author newtrekWang
 * @email  wangjiaxing20160101@gmail.com
 * @time   2018/8/15  23:22
 */
public class PowerOffState implements TvState {
    @Override
    public void turnOn() {
       // 没有实现即失灵
    }

    @Override
    public void turnOff() {
        // 没有实现即失灵
    }

    @Override
    public void nextChannel() {
        // 没有实现即失灵
    }

    @Override
    public void preChannel() {
        // 没有实现即失灵
    }
}

/**
 *  开机状态下的行为实现
 * @author newtrekWang
 * @email  wangjiaxing20160101@gmail.com
 * @time   2018/8/15  23:22
 */
public class PowerOnState implements TvState {
    @Override
    public void turnOn() {
        System.out.println("音量调高");
    }

    @Override
    public void turnOff() {
        System.out.println("音量调低");
    }

    @Override
    public void nextChannel() {
        System.out.println("切换到了下一个频道");
    }

    @Override
    public void preChannel() {
        System.out.println("切换到了上一个频道");
    }
}

/**
 *  电视机遥控器类
 * @author newtrekWang
 * @email  wangjiaxing20160101@gmail.com
 * @time   2018/8/15  23:29
 */
public class TvController {
    private TvState state;

    public void powerOn(){
        this.state = new PowerOnState();
        System.out.println("已开机");
    }

    public void powerOff(){
        this.state = new PowerOffState();
        System.out.println("已关机");
    }

    public void turnOn() {
        state.turnOn();
    }

    public void turnOff() {
        state.turnOff();
    }
    public void nextChannel() {
        state.nextChannel();
    }

    public void preChannel() {
        state.preChannel();
    }

}

参考:segmentfault.com/a/119000001…

状态模式和策略模式的区别:juejin.cn/post/684490…