//トピック、各観察者の状態変更トリガを受信する クラスに件名{ コンストラクタ(){ this.state = 0 this.observers = [] } getStateを(){ 戻りthis.state } SETSTATE(状態){ this.state =状態 this.notifyAllObservers() } アタッチ(観察){ this.observers.push(観察) } notifyAllObservers(){ this.observers.forEach(観察=> { observer.update() }) } } //オブザーバ、待機トリガー クラスオブザーバー{ コンストラクタ(名前、件名){ this.name名= this.subject =件名 this.subject.attach(本) } 更新(){ にconsole.log( `$ {this.name}更新、状態:$ {this.subject.getState()} ') } } //测试代码 sが新しいテーマを()=せて (S、 'O1')O1 =新たなオブザーバーせて (S、 'O2')O2 =新しいオブザーバーせ O3 =新たなオブザーバー( '03'、S)せ s.setState(1)
オブザーバーのステータスを変更した場合、観察者は相対的なものを実行します
結合の程度が比較的小さい観察観察は、コードの変更は、内部ビューアに書き込まれていません
視聴者の観察者の複数があるかもしれません
他のシナリオ
時計のモニター変数1.vue更新
その後、非同期2.約束は、その後、FUNCビューア複数あってもよいです。値は、ビューアが実行され、視聴者に更新され、コードが比較的に小さいカップリングです。観測者よりもあるかもしれません。
新しい新しいプロミスFUNC = VAR((解決拒否)=> { 解決( '戻り値'); }); func.then(関数(){ にconsole.log( "観察者が実行..."); }) ; func.then(関数(){ にconsole.log( "観察者が実行..."); });