状态模式
什么是状态模式?
状态模式(State Pattern) 是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。看起来就像改变了它的类一样。
核心思想:将对象的行为封装在不同的状态类中,当状态改变时,对象的行为也随之改变。
核心角色
- Context(上下文):持有当前状态的对象
- State(状态接口):定义状态的公共接口
- ConcreteState(具体状态):实现特定状态下的行为
代码实现:
typescript
//定义每一个状态的抽象接口
abstract class State {
abstract handle(): void;
}
//以交通信号灯为例,信号灯有三种状态 绿灯 => pass,红灯 => stop,黄灯 => slow
//定义具体的状态类 绿灯状态
class PassState extends State {
handle(): void {
console.log("此时是绿灯,可以通行");
setTimeout(() => {
$context.switchState(new SlowState());
$context.go();
}, 3000);
}
}
//定义具体的状态类 红灯状态
class StopState extends State {
handle(): void {
console.log("此时是红灯,等绿灯才能通行");
setTimeout(() => {
$context.switchState(new PassState());
$context.go();
}, 3000);
}
}
//定义具体的状态类 红灯状态
class SlowState extends State {
handle(): void {
console.log("此时是黄灯,请缓慢通行");
setTimeout(() => {
$context.switchState(new StopState());
$context.go();
}, 3000);
}
}
//核心角色,上下文类
class Context {
constructor(private stateInstance: State) {}
/**
* 设置当前状态
* @param state
*/
public switchState(state: State) {
this.stateInstance = state;
}
/**
* 在当前状态下执行处理函数
* @returns void
*/
public go() {
this.stateInstance.handle();
}
}
//以红灯状态为初始状态
const $context = new Context(new StopState());
$context.go();