示例,Subject主题 ,Observer观察者。所有的观察者都观察state,state改变通知所有的观察者。
class Subject {
private state: number = 0;
private observers: Array<Observer> = [];
getState() {
return this.state;
}
setState(state: number) {
this.state = state;
this.notify();
}
attach(observer: Observer) {
this.observers.push(observer);
}
private notify() {
this.observers.forEach((observer) => {
observer.update(this.state);
});
}
}
class Observer {
private name: string;
constructor(name: string) {
this.name = name;
}
update(state: number) {
console.log("update: " + this.name + " " + state);
}
}
const subject = new Subject();
const observer1 = new Observer("张三");
const observer2 = new Observer("李四");
subject.attach(observer1);
subject.attach(observer2);
subject.setState(1);
setTimeout(() => {
subject.setState(2);
}, 3000);