美文网首页
23种设计模式-状态模式(遥控器)

23种设计模式-状态模式(遥控器)

作者: 王灵 | 来源:发表于2019-02-28 22:04 被阅读0次

定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
使用场景:
1、一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。
2、代码中包含大量与对象状态有关的条件语句,例如,一个操作中包含庞大的多分支语句,且这些分支依赖于该对象的状态。
写一个遥控器示例

/**
 * 电视状态接口,定义了电视操作的函数
 */
public interface TvState {
    public void nextChannel();
    public void prevChannel();
    public void turnUp();
    public void turnDown();
}

/**
 * 关机状态,此时只有开机更能是有效的
 */
public class PowerOffState implements TvState {
    @Override
    public void nextChannel() {

    }

    @Override
    public void prevChannel() {

    }

    @Override
    public void turnUp() {

    }

    @Override
    public void turnDown() {

    }
}

/**
 * 开机状态,此时再触发开机功能不做任何操作
 */
public class PowerOnState implements TvState {
    @Override
    public void nextChannel() {
        Log.e("下一频道");
    }

    @Override
    public void prevChannel() {
        Log.e("上一频道");
    }

    @Override
    public void turnUp() {
        Log.e("调高音量");
    }

    @Override
    public void turnDown() {
        Log.e("调低音量");
    }
}

/**
 * 电源操作接口
 */
public interface PowerController {
    public void powerOn();

    public void powerOff();
}

public class TvController implements PowerController, TvState {
    TvState tvState;

    public void setTvState(TvState tvState) {
        this.tvState = tvState;
    }

    @Override
    public void powerOn() {
        setTvState(new PowerOnState());
        Log.e("开机啦");
    }

    @Override
    public void powerOff() {
        setTvState(new PowerOffState());
        Log.e("关机啦");
    }

    @Override
    public void nextChannel() {
        tvState.nextChannel();
    }

    @Override
    public void prevChannel() {
        tvState.prevChannel();
    }

    @Override
    public void turnUp() {
        tvState.turnUp();
    }

    @Override
    public void turnDown() {
        tvState.turnDown();
    }
}

public class Client {
    public static void main(String[] args){
        TvController tvController=new TvController();
        //设置开机
        tvController.powerOn();
        //下一频道
        tvController.nextChannel();
        //调高音量
        tvController.turnUp();
        //设置关机
        tvController.powerOff();
        //调高音量,此时不会生效
        tvController.turnUp();
    }
}

相关文章

  • Android 命令模式

    Android 设计模式系列文章 Android 23种设计模式 前言 命令模式,多被用于程序菜单命令。比如遥控器...

  • 设计模式学习专栏五--------命令模式

    设计模式学习专栏五--------命令模式 场景 设计一个智能遥控器,遥控器上有7个插槽 , 每个插槽(某设备具...

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 23种设计模式-状态模式(遥控器)

    定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。使用场景:1、一个对象的行为取决于它...

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

  • 设计模式-状态设计模式

    1.定义 对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以...

  • 设计模式——状态模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

  • 设计模式--状态模式

    基本常识:策略模式与状态模式是双胞胎,在出生时才分开。 假设公司有个糖果机,1当糖果机由糖果,投入25分钱,转动曲...

  • 设计模式——状态模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...

  • 设计模式《状态模式》

    引言   上一节我们说了策略模式。这一节我们讲讲策略模式的双胞胎弟弟:状态模式,这个模式大家可能不常见,也不常用,...

网友评论

      本文标题:23种设计模式-状态模式(遥控器)

      本文链接:https://www.haomeiwen.com/subject/usdluqtx.html