无名 发表于 2022-5-8 17:02:06

【LSP】状态模式(c++实现)


http://cdn.u1.huluxia.com/g4/M01/6B/43/rBAAdl93DsWAR2sPAACt4WdlvYs666.jpg
模式定义
状态模式(state),当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

模式动机
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
当一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式了。
UML类图http://cdn.u1.huluxia.com/g4/M01/6B/43/rBAAdl93DsaAOL-AAACRZMvB030061.jpg

源码实现
state.hhttp://cdn.u1.huluxia.com/g4/M01/6B/43/rBAAdl93DseAWIR0AAJQef4w8lg632.jpg
优点
模式的优点

将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。

将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易的增加新的状态和转换。

消除庞大的条件分支语句。

状态模式通过把各种状态转移逻辑分布到state的子类之间,来减少相互之间的依赖。

缺点
模式的缺点

每个子状态跳转到另外一个子状态是固定的,不能够灵活设置下一个状态,也就是说状态之间装换最好是一对一的,否则就又会出现一个庞大的分支语句。从这点上来看还有点像职责链模式。
页: [1]
查看完整版本: 【LSP】状态模式(c++实现)