java 之 状态模式(大话设计模式)
看过大话设计模式的小伙伴,都知道大话设计模式中的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 之 状态模式(大话设计模式)相关推荐
- java设计与模式_设计模式《JAVA与模式》之状态模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述状态(State)模式的: 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为 ...
- 享元模式 -- 大话设计模式
在今天,读书有时是件"麻烦"事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<大话设计模式>来祭奠那逝去的-- 享元模式:运用共享技术有效地支持大量细粒度的对 ...
- java 之 观察者模式(大话设计模式)
观察者模式,笔者以前做校验订单时用过一次,只是不知道有这个模式,当时使用观察者省略了N多if else 在笔者看来观察者模式比较试用于一个对象状态改变后,很多个对象也要根据这个状态做相应的动作,当然观 ...
- php 状态模式,PHP设计模式之状态模式
状态模式从字面上其实并不是很好理解.这里的状态是什么意思呢?保存状态?那不就是备忘录模式了.其实,这里的状态是类的状态,通过改变类的某个状态,让这个类感觉像是换了一个类一样.说起来有点拗口吧,先学习概 ...
- java 之 单例模式(大话设计模式)
笔者记得去面试时曾被问起这个模式,当时还没有看过设计模式,对设计模式基本上一无所知,不过可以肯定的是笔者用过单例模式.当时回答的风马牛不相及,很尴尬. 也是从那时起,开始学习设计模式.今天所说的就是单 ...
- java getstate_状态模式(State)_java实现
//20210122 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现状态模式 状态模式核心思想: 符合迪米特原则,将大量分支语句变成类的形式 程序源 ...
- php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
状态模式 (State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.其别名为状态对象(Objects for States) (一)为什么需要状态模式 ...
- java计数器策略模式_java设计模式(二十一)--策略模式
对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用. 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略 ...
- 抽象工厂模式 -- 大话设计模式
在今天,读书有时是件"麻烦"事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<大话设计模式>来祭奠那逝去的-- 待续-- 转载于:https://www.cn ...
- java的visitor模式_Java设计模式之Visitor模式是什么样的?
作用于某个对象群中各个对象的操作.它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作.在Java中,Visitor模式实际上是分离了collection结构中的元素和对这些元素进行操作 ...
最新文章
- react-webpack-express
- android在线播放音乐
- Centos6.3下利用open***部署远程×××服务
- module是什么类型_nodejs中module.exports和exports的区别
- databricks使用
- 2019年春季学期第二周作业(文件指针)
- linux mysql启动_MySQL 安装(二)
- ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)
- get post请求区别_网页常见的两种请求方式Get和Post
- jQuery Mobile中弹窗popup的data-*选项
- [渝粤教育] 浙江大学 半导体材料 参考 资料
- 【GNN】图嵌入之 node2vec:网络的可扩展特征学习
- html实现宿舍管理系统,宿舍管理系统部分代码实现
- java 制作简历_个人简历java制作.doc
- 华为交换机主备命令_华为交换机基本命令
- html 水平、垂直 菜单栏
- Type string trivially inferred from a string literal, remove type annotation.eslint@typescript-eslin
- mysql的用户名迁移SCHEMA_数据库实时转移之Confluent环境搭建(二)
- 车载滤波器组件焊锡开裂失效分析
- 树莓派python控制两个舵机_利用树莓派,光敏电阻和小型舵机实现自动获取 《最终幻想 X HD重制版》 连续避雷200次奖杯...