状态模式

应用场景:做相同的操作但是在状态不同时所产生的结果并不相同。

电视状态接口,在开机和关机不同状态下的相同操作产生的结果不相同。关机状态下只能将状态改为开机状态

定义相同操作接口:

public interface TvState {
    void nextChannel();

    void prevChannel();

    void turnUP();

    void turnDown();
}

关机状态:(具体的操作在关机状态下不实现)

public class PowerOffState implements TvState {
    @Override
    public void nextChannel() {
        //nothing
    }

    @Override
    public void prevChannel() {
        //nothing
    }

    @Override
    public void turnUP() {
        //nothing
    }

    @Override
    public void turnDown() {
        //nothing
    }
}

开机状态:

public class PowerOnstate implements TvState {
    @Override
    public void nextChannel() {
        //do something
    }

    @Override
    public void prevChannel() {
        //do something
    }

    @Override
    public void turnUP() {
        //do something
    }

    @Override
    public void turnDown() {
        //do something
    }
}

定义了不同状态下的具体操作之后就需要再写一个开关机状态的接口和实现了开关机接口的类。

public interface PowerController {
    public void powerOn();

    public void powerOff();
}
public class TvController implements PowerController {
    TvState mState;

    public void setState(TvState state) {
        mState = state;
    }

    @Override
    public void powerOn() {
        setState(new PowerOnstate());
        //do something
    }

    @Override
    public void powerOff() {
        setState(new PowerOffState());
        //do something
    }

    public void nextChannel() {
        mState.nextChannel();
    }

    public void prevChannel() {
        mState.prevChannel();
    }

    public void turnDown() {
        mState.turnDown();
    }

    public void turnUp() {
        mState.turnUP();
    }
}

之后再写调用类:

public class Client {
    public static void main(String[] args) {
        TvController tvController = new TvController();
        tvController.powerOn();
        tvController.nextChannel();
        tvController.turnDown();
        tvController.powerOff();
        //not work
        tvController.nextChannel();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 定义:当一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。又称状态对象模式,状态模式...
    明朗__阅读 1,720评论 0 0
  • 源码地址 介绍 状态模式中的行为是由状态来决定的,不同的状态有不同的行为。状态模式和策略模式的结构几乎一样,但它们...
    yangMr阅读 3,392评论 0 1
  • 案例:电视遥控器-->开机、关机、下个频道、上个频道、调高音量、调低音量、 条件:开机的状态下才能进行其他操作、关...
    Mrko0630阅读 5,646评论 0 1
  • 序 最近事情太多,好久没写博客了, 想来之前的设计模式系列还有好几种设计模式没说, 正好最近写代码用了状态模式, ...
    Anderson大码渣阅读 10,238评论 1 8
  • ------处女座女的处女简 听说这次《向组织揩油》的表彰大会会有很多奖品,我决定去凑个热闹 不料一上去却被永澄给...
    霖家小姐阅读 3,813评论 5 4

友情链接更多精彩内容