《设计模式Design Pattern》读书笔记之十八
State模式
结构
目的
当一个对象(context)根据当前本身的状态(state),会产生不同的行为的时候,可以采用state模式。把所有跟改状态相关的行为/动作转移到一个外部的state对象中。这样,可以避免context内部大量的switch.if等判断。
优缺点
带来更大的灵活性和可维护性,因为一个新的状态可以很容易地通过派生一个类来追加。当然,带来的缺点是会增加类的数目,降低紧凑性。
讨论
1, 如果state没有内部的状态,可以被共享。这时候,就是一个没有intrinsic state的Flyweight.
2, State的迁移(transition)如果是fixed的,可以在context内部进行。如果更灵活一些,state的迁移由各个state来进行,这时候,context需要提供一个接口让state对象设定context的state;优点是可以通过派生新类来容易地修改或者扩展state迁移逻辑,缺点是一个state起码需要知道一个另外的state,增加了state之间的耦合度。
3, State对象可以在需要的时候才创建,用完了之后就删除;也可以预先生成所有的state,永远不删除。取决于state迁移的频度等,进行合理的选择。
4, State对象一般是Singletons。
参考资料
《Design Pattern》 Gang-Of-4 1997