状态模式

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

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

定义相同操作接口:

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();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 定义:当一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。又称状态对象模式,状态模式...
    明朗__阅读 225评论 0 0
  • 源码地址 介绍 状态模式中的行为是由状态来决定的,不同的状态有不同的行为。状态模式和策略模式的结构几乎一样,但它们...
    yangMr阅读 496评论 0 1
  • 案例:电视遥控器-->开机、关机、下个频道、上个频道、调高音量、调低音量、 条件:开机的状态下才能进行其他操作、关...
    Mrko0630阅读 1,719评论 0 1
  • 序 最近事情太多,好久没写博客了, 想来之前的设计模式系列还有好几种设计模式没说, 正好最近写代码用了状态模式, ...
    Anderson大码渣阅读 4,797评论 1 8
  • 曾经一直在试图找个这样的地方来写写东西,虽然说写的不好,只是想写,不管怎样,总有可以写的东西,以前用过豆瓣,没坚持...
    当年万里觅封侯阅读 276评论 0 0