做某些业务逻辑时使用状态机可以将不同的功能分到各个各个及业务的阶段去写,避免了某一个文件功能繁多,代码冗杂的 问题 ,便于阅读及后续维护
BaseState 定义一个状态基类,各个业务逻辑继承这个基类 其中定义两个方法 分别是进入当前状态 和退出当前状态时触发的事件 onStateEnter onStateExit
StateMachine 状态机
其中 registerState removeState 用来注册和 删除状态,调用changeState方法 会触发baseState里定义的onStateEnter onStateExit
使用:创建一个状态继承BaseState 重写 onStateEnter onStateExit方法 用来初始化/清除进入当前状态时的数据
调用StateMachine 的registerState注册状态
调用StateMachine的changeState方法触发进入当前状态
1、定义状态基类 BaseSate.ts
type ChangeFunc = {
(stateName: string | number, extraInfo: any | null, exitCallback: Function, enterCallback: Function): void}
export default class BaseState {
private NAME: string | number; //状态名
private isRunning: boolean; //当前状态是否在运行
public changeState: ChangeFunc; //定义一个改变状态的方法
constructor(name: string | number) {
this.NAME = name;
this.isRunning = false
}
public getIsRunning() {
return this.isRunning
}
public setIsRunning(isRunning: boolean = false){
this.isRunning = isRunning
}
public getStateName() {
return this.NAME
}
public onStateEnter(extraInfo: any = null, fromeState: string|number = "", callback: Function = null) {
callback && callback()
}
public onStateExit(extrainfo: any