状态模式-

定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

适用场景:

1、一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。

2、条件、分支语句的代替者,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常,有多个操作包含这一相同的条件结构。State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。

优点:

1、封装了转换规则。

2、枚举可能的状态,在枚举状态之前需要确定状态种类。

3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。

4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。

5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

缺点:

1、状态模式的使用必然会增加系统类和对象的个数。

2、状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。

3、状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

生活场景中的应用:

1、踢足球的时候运动员可以有上场、休息和罚下。

2、交通信号灯,红、黄、绿三种状态

源码应用:

1)jdk的javax.faces.webapp.FacesServlet,实例方法的执行依赖于实例状态。

2)Spring StateMachine状态机

相关推荐
e***98571 天前
SpringMVC的工作流程
状态模式
q***08742 天前
SpringMVC的工作流程
状态模式
g***78912 天前
SpringBoot中使用TraceId进行日志追踪
spring boot·后端·状态模式
shuxiaohua4 天前
使用HttpURLConnection调用SSE采坑记录
状态模式
崎岖Qiu4 天前
状态模式与策略模式的快速区分与应用
笔记·设计模式·状态模式·策略模式·开闭原则
Jonathan Star5 天前
前端需要做单元测试吗?哪些适合做?
前端·单元测试·状态模式
一水鉴天6 天前
整体设计 全面梳理复盘 之40 M3 统摄三层 AI 的动态运营社区(Homepage)设计
架构·transformer·状态模式·公共逻辑
前端玖耀里9 天前
Vue + Axios + Node.js(Express)如何实现无感刷新Token?
状态模式
将编程培养成爱好9 天前
C++ 设计模式《外卖骑手状态系统》
c++·ui·设计模式·状态模式
向葭奔赴♡10 天前
Spring Boot参数校验全流程解析
状态模式