博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——状态模式
阅读量:4648 次
发布时间:2019-06-09

本文共 2445 字,大约阅读时间需要 8 分钟。

这次来看下状态模式,先来看下定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

再来看下类图:

来看下代码吧:

public interface State {    void start();    void middle();    void stop();}

  

public class StartState implements State {    private Context context;    public StartState(Context context) {        this.context = context;    }    @Override    public void start() {        System.out.println("开始状态");        context.setState(context.getMiddleState());    }    @Override    public void middle() {        System.out.println("对不起,状态都没开始所以无法处于中间状态");    }    @Override    public void stop() {        System.out.println("对不起,状态都没开始所以无法处于结束状态");    }}

  

public class MiddleState implements State {    private Context context;    public MiddleState(Context context) {        this.context = context;    }    @Override    public void start() {        System.out.println("对不起,状态已经开始");    }    @Override    public void middle() {        System.out.println("中间状态");        context.setState(context.getStopState());    }    @Override    public void stop() {        System.out.println("对不起,状态已经处于中间状态无法结束");    }}

  

public class StopState implements State {    private Context context;    public StopState(Context context) {        this.context = context;    }    @Override    public void start() {        System.out.println("对不起,状态已经处于结束状态");    }    @Override    public void middle() {        System.out.println("对不起,状态已经处于结束状态");    }    @Override    public void stop() {        System.out.println("结束状态");        context.setState(context.getStartState());    }}

  

public class Context {    private State startState;    private State middleState;    private State stopState;    private State state;    public Context() {        this.startState = new StartState(this);        this.middleState = new MiddleState(this);        this.stopState = new StopState(this);        this.state = startState;    }    public State getStartState() {        return startState;    }    public State getMiddleState() {        return middleState;    }    public State getStopState() {        return stopState;    }    public void setState(State state) {        this.state = state;    }    public void start() {        state.start();    }    public void middle() {        state.middle();    }    public void stop() {        state.stop();    }}

  

如果不想用很多的if的话,状态模式很适合,把所有状态机都封装成一个类,一个类就是一个状态,职责单一,也很好扩展,问题就是状态很多的话,类也会很多,其实前面的模式哪个类会少呢。

 

如果有不对请提出,共同提高,谢谢!!

 

转载于:https://www.cnblogs.com/shenqiaqia/p/11217736.html

你可能感兴趣的文章
图像处理笔记(十八):模板匹配
查看>>
Educational Codeforces Round 60 D. Magic Gems
查看>>
c# 保存和打开文件的方法
查看>>
调用图灵机器人API实现简单聊天
查看>>
MATLAB indexing question
查看>>
MATLAB 求解最优化问题
查看>>
【转载】java InputStream读取数据问题
查看>>
网络基础Cisco路由交换四
查看>>
CloudFoundry基础知识之理论篇
查看>>
fatal error LNK1120: 11 unresolved externals
查看>>
测试工具类汇总
查看>>
WEB消息推送-comet4j
查看>>
安卓开发 数据存储
查看>>
贪心思维 专题记录 2017-7-21
查看>>
欧几里得与扩展欧几里得总结
查看>>
js的Prototype属性 解释及常用方法
查看>>
JavaScript 计时事件
查看>>
【Django】基于Django架构网站代码的目录结构
查看>>
(二)stm32之中断配置
查看>>
vim快捷键使用记录
查看>>