Observer パターン
Observerパターンでは、Observableオブジェクト、つまりObservableのインスタンスを1つだけ保持すれば十分です。データの変更があった場合、同じインターフェイスを実装したObserverのセットを維持するだけでよく、SubjectはObserverに通知する際にどの統一メソッドを呼び出すかだけ知っていればよいのです。
コードの例:
var subject = {
observable: [],
notify() {
this.observable.forEach(observer => {
observer.update()
})
},
attach(observer) {
this.observable.push(observer)
}
}
var observer = {
update() {
console.log('update');
}
}
subject.attach(observer)
subject.notify()
パブリッシュ・サブスクライブ・パターン
パブリッシュ・サブスクライブ・モードでは、パブリッシャーはサブスクライバーに 直接通知しません。言い換えると、パブリッシャーとサブスクライバーはお互いを知らず、 第三者、つまりメッセージキューによってトリガーされます。パブリッシャーとサブスクライバーはイベント名でつながっており、 イベント名が一致すると、対応するサブスクライバーのメソッドを 直接実行します。
コードの例:
var publisher = {
publish(pubsub) {
pubsub.publish()
}
}
var pubsub = {
subscribes: [],
publish() {
this.subscribes.forEach(sub => {
sub.update()
})
},
subscirbe(sub) {
this.subscribes.push(sub)
}
}
var subscribe = {
update() {
console.log('update');
},
subscribe(pubsub) {
pubsub.subscirbe(this)
}
}
subscribe.subscribe(pubsub)
publisher.publish(pubsub)