State模式
地铁十字转门
- 状态迁移表格.
-
起始状态 触发迁移的事件 终止状态 要执行的动作.
- Locked Coin UnLocked UnLock
- UnLocked Pass Locked Lock
-
- 最直接的方式:switch(state) case Locked : switch(event) case Pass:
- State模式
- State/Strategy模式
- 都有一个Context,其委托给一个具有几个派生类的多态基类.
- 不同:State模式中的派生类持有回指向Context的引用.派生类的主要功能时使用这个引用来调用Context中的方法.
- 所有State模式实例都是Strategy模式实例.反之不成立.
- State模式的收益
- 分离了状态机的逻辑(分布在State派生类中)和动作(Context中实现).
- 缺点:逻辑分散(无法在一处看到整个状态机逻辑);State派生类的难以编写.