设计模式之状态模式总结篇
状态模式总结篇
状态模式总结篇,我们将从以下几个方面对状态模式进行总结。
状态模式出现的意图是什么?
通过对象内部状态发生改变进而来改变对象的行为,对象看起来好像是被修改了一样。如,没有糖果的时候(是一个状态),糖果机就不能运行了,有糖果之后(另一个状态),投币就可以出糖果了。
本文出处凯哥Java(kaigejava)讲《23种设计模》系列教程种的《状态模式总结篇》
凯哥公众号:凯哥Java
凯哥个人博客:www.kaigejava.com
主要解决的问题是什么?
对象的行为依赖于对象的状态变化(属性变更),并且根据属性值(状态)的改变而改变相关的行为。如,出不出糖果这个行为受糖果机里面有没有糖果和有没有投币这两个状态影响而改变的。
什么时候或者是什么场景下使用状态模式?
在我们的程序代码中包含和很多与对象状态有关的条件语句(如if……else……或者是switch等)的时候,就可以使用状态模式
如何实现状态模式?
将代码中的各种具体的状态抽象到一个类中。这样就有了状态类抽象对象。
使用状态模式的关键点是什么?
需要和命令模式进行区分。命令模式的接口中,通常情况下只有一个方法,而状态模式的接口中有一个或者多个方法。还有一个不同的地方就是,状态模式的时候其实现类的方法一般是返回一个值或者是改变变量的值的。这是因为,状态模式一般和对象的状态有关。
状态模式的优缺点:
优点:
1:对状态转换规则进行了封装;
2:可以使用枚举类,枚举出所有可能的状态。但是需要在枚举状态之前确定状态的种类;
3:扩展性好。将所有与某个或者某些状态有关的行为放到了一个类对象中,这样方便管理,并且可以方便的新增状态,只需要改变对象状态就可以实现改变对象行为了;
4:代码简洁好维护。状态模式允许状态转换逻辑和状态对象合为一体,而不是一个巨大的条件语句块;
5:可以让多个不同的环境对象共享一个状态的对象,这样减少系统中对象的数量。
缺点:
1:增加对象和系统类的个数;
2:结构与实现比较复杂,如果使用不当,可能会造成程序结构和代码给人感觉很混乱的;
3:对开闭原则支持不好。
使用状态模式需要注意事项:
在行为受到状态约束的时候,使用状态模式,而且需要注意的是:状态最好不要超过5个
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
看了这个Java实习生入职测试题后,幸亏我不是实习生
看了这个Java实习生入职测试题后,幸亏我不是实习生 一个Java实习生的入职测试题,你能答对几个? 今天在某APP中看到,有实习生放出的Java实习生入职测试题。看完之后,很庆幸自己不是实习生。 本文来源:公众号:凯哥Java(kaigejava) 个人博客:www.kaigejava.com 我们来一起看看题目吧: 1:String类为什么是fianl的? 2:JDK8中的HashMap的源码,实现原理,底层结构? 3:反射中,Class.forName和classloader的区别? 4:session和cookie的区别和联系,session的生命周期,多个服务部署时候session管理? (ps:凯哥备注:这个不是考分布式session管理吗?) 5:Java中的队列都有哪些?有什么区别? 6:详谈一下Java的内存模型以及GC算法? (JVM的算法) 7:Java10、Java11的新特性?(额,这个凯哥也不知道) 8:Java内存泄漏的问题调查定位;jmap,jstack的使用 9:Spring的体现结构和jar用途 10:Spring MVC的运行原理 11:Sprin...
- 下一篇
重磅发布- SpringBoot2.0前后端分离开发之用户身份认证实战(后端实现) 视频教程
概要介绍:历经两三个星期的时间,Debug亲自撸的 “SpringBoot2.x前后端分离开发之用户身份认证实战(后端实现)” 终于完成了。正如字面意思,本课程讲解的是在当前微服务、分布式系统架构时代,前后端在进行接口交互、服务与服务之间在进行接口交互时如何对用户的身份进行认证,即如何进行鉴权! 详细内容介绍: 本课程主要是跟各位小伙伴分享、介绍并实战了两大核心的用户身份认证(接口鉴权)模式,即基于Token的认证模式以及基于Session的认证模式,其中 基于Token的认证模式则主要介绍了三种核心、主流的认证模式,即基于Token+数据库、基于Token+缓存中间件Redis、基于Token+JWT的认证模式。 基于Session的认证模式也主要介绍了三种核心、主流的认证模式,即基于原生Spring Session以及Session共享的认证模式、基于Shiro Session的认证模式、基于Shiro + Redis 的Session共享认证模式 即课程的整体介绍如下图所示: 值得介绍的是,本课程在技术栈层面涵盖了“用户身份认证”、“接口鉴权”等业务场景 常用的大部分技术,包括S...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题