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 中对应用加载状态的管理;