JSモード - モードオブザーバ

//トピック、各観察者の状態変更トリガを受信する
クラスに件名{ 
  コンストラクタ(){ 
      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( "観察者が実行..."); 
});

 

おすすめ

転載: www.cnblogs.com/chenyi4/p/11413920.html