看过大话设计模式的小伙伴,都知道大话设计模式中的demo代码不是JAVA的,对于编程来说,设计模式不限于任何语言,讲述的是编程的思想。

今天笔者再次看这篇文章时,看了下别人的博客对于设计模式的理解,希望能汲取点其中的核心思想,意外的是看到很多博客对状态模式理解的可能有些偏差。

正常来说,如果没有状态模式的情况下,我们会用一堆if else if或者 switch case来处理。寻找到正确的入口!这样的代码违背了单一原则,日后维护会牵一发而动全身。

使用状态模式能够很好的解决这个问题,来看下类图

大话设计模式-类图

再看下简单的笔者的例子:

/*** 抽象状态接口*/
public interface State {public void WriteProgram(Work work);
}

/*** 上下文*/
public class Work {private State state;private Integer hour;public Work() {state = new GoodMorning();}public void writeProgram() {state.WriteProgram(this);}public Integer getHour() {return hour;}public void setHour(Integer hour) {this.hour = hour;}public void setState(State state) {this.state = state;}
}

/*** 早晨状态 状态的一个分支*/
public class GoodMorning implements State{@Overridepublic void WriteProgram(Work work) {if (work.getHour() < 12) {System.out.println("工作状态很好啊");} else {work.setState(new AfterMorning());work.writeProgram();}}
}

/*** 状态的分支 下午状态*/
public class AfterMorning implements State {@Overridepublic void WriteProgram(Work work) {if (work.getHour() < 14) {System.out.println("有点困了");} else {work.setState(new Evening());work.writeProgram();}}
}

/*** 夜晚状态 状态的一个分支*/
public class Evening implements State {@Overridepublic void WriteProgram(Work work) {if (work.getHour() >= 19) {System.out.println("该下班了哦");}}}

以上是笔者对状态模式的理解,如果需求有变更,增加某些状态,我们只需要在增加子类,如果是在中间插入状态,我们只需要改上一个状态的指向就可以了。

希望能帮助学习状态模式的小伙伴,不要生搬硬套设计模式,理解其精髓最重要!!!

转载于:https://www.cnblogs.com/zhuxiansheng/p/7999656.html

java 之 状态模式(大话设计模式)相关推荐

  1. java设计与模式_设计模式《JAVA与模式》之状态模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...

  2. 享元模式 -- 大话设计模式

    在今天,读书有时是件"麻烦"事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<大话设计模式>来祭奠那逝去的-- 享元模式:运用共享技术有效地支持大量细粒度的对 ...

  3. java 之 观察者模式(大话设计模式)

    观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了N多if else 在笔者看来观察者模式比较试用于一个对象状态改变后,很多个对象也要根据这个状态做相应的动作,当然观 ...

  4. php 状态模式,PHP设计模式之状态模式

    状态模式从字面上其实并不是很好理解.这里的状态是什么意思呢?保存状态?那不就是备忘录模式了.其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了一个类一样.说起来有点拗口吧,先学习概 ...

  5. java 之 单例模式(大话设计模式)

    笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式.当时回答的风马牛不相及,很尴尬. 也是从那时起,开始学习设计模式.今天所说的就是单 ...

  6. java getstate_状态模式(State)_java实现

    //20210122 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现状态模式 状态模式核心思想: 符合迪米特原则,将大量分支语句变成类的形式 程序源 ...

  7. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

    状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...

  8. java计数器策略模式_java设计模式(二十一)--策略模式

    对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用. 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略 ...

  9. 抽象工厂模式 -- 大话设计模式

    在今天,读书有时是件"麻烦"事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<大话设计模式>来祭奠那逝去的-- 待续-- 转载于:https://www.cn ...

  10. java的visitor模式_Java设计模式之Visitor模式是什么样的?

    作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作.在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作 ...

最新文章

  1. react-webpack-express
  2. android在线播放音乐
  3. Centos6.3下利用open***部署远程×××服务
  4. module是什么类型_nodejs中module.exports和exports的区别
  5. databricks使用
  6. 2019年春季学期第二周作业(文件指针)
  7. linux mysql启动_MySQL 安装(二)
  8. ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)
  9. get post请求区别_网页常见的两种请求方式Get和Post
  10. jQuery Mobile中弹窗popup的data-*选项
  11. [渝粤教育] 浙江大学 半导体材料 参考 资料
  12. 【GNN】图嵌入之 node2vec:网络的可扩展特征学习
  13. html实现宿舍管理系统,宿舍管理系统部分代码实现
  14. java 制作简历_个人简历java制作.doc
  15. 华为交换机主备命令_华为交换机基本命令
  16. html 水平、垂直 菜单栏
  17. Type string trivially inferred from a string literal, remove type annotation.eslint@typescript-eslin
  18. mysql的用户名迁移SCHEMA_数据库实时转移之Confluent环境搭建(二)
  19. 车载滤波器组件焊锡开裂失效分析
  20. 树莓派python控制两个舵机_利用树莓派,光敏电阻和小型舵机实现自动获取 《最终幻想 X HD重制版》 连续避雷200次奖杯...

热门文章

  1. 标准C程序设计七---03
  2. Android 设计模式实战之关于封装计费代码库的策略模式详谈
  3. C#读写XML的两种一般方式
  4. Fiddler-抓取安卓手机APP请求地址
  5. 写一个生产者消费者的例子
  6. servlet的请求转发与重定向
  7. Spark学习笔记——构建基于Spark的推荐引擎
  8. IOS多线程实现多图片下载(一)
  9. Python破解协议密码
  10. 修改系统文件内容的经典错误总结