设计模式之订阅者模式
简单记录Observable. 该设计模式是RxJS的核心之一。
定义
一个目标对象 管理者所有依赖于它的观察者对象,当它(该目标对象)发生改变时,它会主动发出通知,告知所有订阅了该目标对象的观察者对象,进而使这些观察者对象自我更新。
示例:
很多媒体、新闻网站都会有订阅功能,网友通过订阅该网站的某些栏目或类别的信息,就会定期收到更新的内容通知,网友就可以进行阅览。当网友取消订阅,就不会再接收任何消息。
在该过程中:
该网站 => 目标对象;
网友 => 观察者;
这是一个简单的一对多模型。
应用场景
RxJS
常见的Web应用中对DOM添加事件监听( addEventListener
)。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| class Subject {
private observerCollection: Array<any>;
constructor() { this.observerCollection = []; } registerObserver(observer: Observer) { this.observerCollection.push(observer); } unregisterObserver(observer: Observer) { let index = this.observerCollection.indexOf(observer); if (index >= 0) this.observerCollection.splice(index, 1); } notifyObservers() { this.observerCollection.forEach((observer: Observer) => observer.notify()); } }
class Observer { private name: any; constructor(name) { this.name = name; }
notify() { console.log(`${this.name} has been notified.`); } }
let subject = new Subject();
let observer1 = new Observer('lomo0'); let observer2 = new Observer('lomo1');
subject.registerObserver(observer1); subject.registerObserver(observer2);
subject.notifyObservers();
subject.unregisterObserver(observer1);
subject.notifyObservers();
|
Angular中的应用
ng2+中; 后续添加项目应用code.