/** * 简单版 发布订阅 */ type Listender = (state: any) => void; class ObserverStateManagerClass { private listeners: Array = []; private state!: any; public attach(listener: Listender) { this.listeners.push(listener); } public detach(listenerToRemove: Listender) { this.listeners = this.listeners.filter( listener => listener !== listenerToRemove, ); } public update(state: T) { this.state = state; this.notify(state); } private notify(state: T) { this.listeners.forEach(listener => listener(state)); } } export const ObserverStateManager = new ObserverStateManagerClass();