State模式
应用场景
- 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的逻辑简化。
- 允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
- 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的系列类当中,可以把复杂的逻辑简化。
本质
- 根据状态来分离和选择行为
- 状态模式是状态驱动,由上下文负责
优点
- 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来
- 消除庞大的条件分支语句,把各种状态转移逻辑分布到State的子类之间,减少了相互间的依赖。
- 显式化进行状态转换:为不同的状态引入独立的 对象,使得状态的转换变得更加明确。而且状态对象可以保证上下文不会发生内部状态不一致的 状况,因为上下文中只有一个变量来沧录状态对象,只要为这一个变量赋值就可以了。
缺点
- State模式问题主要是逻辑分散化,状态逻辑分布到了很多的State的子类中, 很难看到整个的状态逻辑图,这也带来了代码的维护问题。
角色
State模式的类图
示例程序
示例程序的类图
示例代码
https://blog.csdn.net/qq_44824148/article/details/105976987
拓展思路
- 分而治之
- 依赖于状态的处理
定义接口,生命抽象方法
定义多个类,实现具体方法 - 易于增加新的状态
相关设计模式
-
Singleton模式
Singteton模式常常会出现在ConereteState 角色中。 -
Flyweight 模式
在表示状态的类中并没有定义任何实例字段。
满足的原则
- 开闭原则
- 单一职责原则