Alter an object’s behavior when its state changes.
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
动机
一个对象,会根据不同的状态执行不同的响应。
适用性:一个对象的行为取决于它的状态,并且在状态改变的时候能够改变其行为;一个操作中有庞大的多条件分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常可以使用一个或者多个枚举常量表示。
结构和代码
enum TCP_STATE {ESTABLISHED,LISTEN,CLOSED,}class TCPState {open() { };close() { };acknowledge() { };}class TCPEstablishedState extends TCPState { }class TCPListenState extends TCPState { }class TCPClosedState extends TCPState { }const STATE_MAP = {ESTABLISHED: TCPEstablishedState,LISTEN: TCPListenState,CLOSED: TCPClosedState,};class TCPConnection {private _state: TCPState;private _currentSate: TCP_STATE;changeState(state: TCP_STATE) {this._currentSate = state;this._state = new STATE_MAP[state];}open() {this._state.open();}close() {this._state.close();}acknowledge() {this._state.acknowledge();}}
- 和状态机的感觉一致。
let marry = new MarryState();marry.change('jump', 'short').change('go', 2).change('dive', 3).change('win')
效果
- 将特定状态相关的效果「局部化」,并将不同状态行为分割开来。
- 也使得状态进行显示转化,同时
State对象可以被共享。
实战
- UI 编排中,编辑锁的状态管理;
- single-spa 中对应用加载状态的管理;
