观察者模式:主题发生任何变化观察者都将能知道
简单实现:创建主题,让主题维护观察者列表,一旦主题发生变化就通知所有的观察者。
export class Subject {
private listeners: any[];
constructor() {
this.listeners = [];
}
private addListener(listener): void {
this.listeners.push(listener);
}
private removeListener(listener): void {
const index = this.listeners.indexOf(listener);
this.listeners.splice(index, 1);
}
private notify(message: any): void {
this.listeners.forEach(listener => listener.update(message));
}
private startOfWork(): void {
this.notify('开始工作了!');
}
private doingWork(): void {
this.notify('我正在努力工作!');
}
private endOfWork(): void {
this.notify('工作完成!');
}
add(listener: any): void {
this.addListener(listener);
}
remove(listener: any): void {
this.removeListener(listener);
}
doWork(): void {
this.startOfWork();
this.doingWork();
this.endOfWork();
}
}
ngOnInit(): void {
this.observePattern();
}
observePattern(): void {
const Observer1 = {
update: message => {
console.log('Observer1 received:', message);
}
};
const Observer2 = {
update: message => {
console.log('Observer2 received:', message);
}
};
const subject = new Subject();
subject.add(Observer1);
subject.add(Observer2);
subject.doWork();
}
结果