美文网首页
阴晴圆缺 状态模式

阴晴圆缺 状态模式

作者: NazgulSun | 来源:发表于2019-03-12 13:49 被阅读0次

今天说一说状态模式。

其实状态模式也是对于去除复杂的if else语句的一个有效的模式。

为什么 我们总是强调 要去掉 if else呢?

应为 if else 对于变化的封装是很差的。 如果有新的逻辑进来就需要 修改if else

这就违背了面向对象的OCP原则。

状态模式就是这样,设想有一个程序员对象,  他可以提供代码开发,测试,上线等功能。

但是这个对象 处于 繁忙, 空闲 等状态的时候,这几个功能会表现出不同的行为,

我们通常可以使用if else来实现,但现实中的问题,可能会比这个例子复杂的多。

比如在游戏中,对于一个英雄, 他可能会提供N个功能,可能会处于M个状态。

如果写if else 语句来处理,将会是一场灾难,而使用状态模式,结合状态机的转移设置,将会方便得多。

在java中,常用的另外一个例子是线程, 一个线程可以处于多个状态,不同状态下有自己的行为。

对于线程的实现方式可以使用状态模式来处理。

在状态模式中 对应一个context, 就是例子中的 人,英雄,线程, 每个context 对应一个state的接口的引用

这个接口是多态实现的,在很多网上的例子中,我看到 change state的方法,有的人是直接放在 state自己的逻辑里面,

我认为只有context才有全局的信息, state只需要一个 context 的引用,然后changeState的逻辑应该交给 context。

例如:

/**

* 加班的工作状态

*/

public class OvertimeState implements State {

    @Override

    public void doJob(Work work) {

        if(work.getHour() < 21){

            System.out.println("当前时间:" + work.getHour() + ",加班中");

        }else{

            //21点强制下班

            work.setState(new RestState());

            work.doJob();

        }

    }

}

加班的工作状态应该只关心加班的事情,

而不是要把 时间的逻辑加入加班状态中来,

这些事件的逻辑应该由程序员自己处理。

相关文章

  • 阴晴圆缺 状态模式

    今天说一说状态模式。 其实状态模式也是对于去除复杂的if else语句的一个有效的模式。 为什么 我们总是强调 要...

  • 阴晴圆缺

    这几天突然有好多人要走了,尤其是我熟悉的那几个,刚认识的几个朋友,又不见了。于是,我也开始考虑自己的未来,是否还要...

  • 阴晴圆缺

    2018.5.18 阴晴圆缺 女生都是耳听动物吧。 反正我是。 喜欢听好听的话,尤其是情话,喜欢听悦耳的歌,尤其是...

  • 阴晴圆缺

    那个凉风徐徐的晚上 繁华的城市灯火琉璃 陌生的车站 来来往往的人 萧瑟的树叶摇摇欲坠 走了一段段道路 经过一个个角...

  • 阴晴圆缺

    生活在这个世界上的每一个人都会有压抑的情绪,我不是他们我不懂那具体都是因为些什么,也不知道是什么感觉。,只知道我自...

  • 阴晴圆缺

    一直不懂天气为什么会对心情有影响… 于我而言是心情影响了看待天气的感觉…… 人应当怎样过这一生? 我认为无论多成功...

  • 阴晴圆缺

  • 阴晴圆缺

    天色已深、 你的面容变再次出现了 我深望月亮、 那就是你的面容 或是阴晴、或是圆缺 或是微笑、...

  • 阴晴圆缺

    音之魂,乐之章 歌中情,歌中怨 影响不了我 影响不了我 在多的速说​,速说 只是苍白了过往的承若 谎言是什么,是什...

  • 阴晴圆缺

    坐在山河之巅,我望着那轮明月,看着它随时光的流转阴晴圆缺的变化着。我思索我的过往,想起曾经的悲欢离合。皓月的亘古长...

网友评论

      本文标题:阴晴圆缺 状态模式

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