オブザーバーデザインパターン

そのような一つのオブジェクトが変更された場合などのオブジェクトとの間に1対多の関係が存在する場合オブザーバーパターンが、使用されています 

その依存オブジェクトが自動的に通知されることになります。また、行動パターンです。 

そこObserverパターンでは、いくつかの主要なコンポーネント:

 Subjectオブジェクト:サブジェクトは、その扶養家族、と呼ばれるオブザーバーのリストを保持するオブジェクトです。そしてusally彼らの方法のいずれかを呼び出すことにより、任意の状態の変化を自動的に通知します。

 Observerオブジェクト:

 

以下オブザーバーパターン例の論理フローです。

 


ステップ1は、オブザーバー抽象クラスを作成します。

パブリック抽象クラスオブザーバー{ 
   保護対象被験者; 
   パブリック抽象ボイド更新(); 
}

 

ステップ2. Subjectクラス 

輸入はjava.util.ArrayList; 
輸入はjava.util.List; 

パブリッククラス件名{ 
	
   プライベートリスト<オブザーバー>オブザーバー=新しいのArrayList <オブザーバー>(); 
   プライベートint型状態。

   公共のint getStateを(){ 
      状態を返します。
   } 

   公共ボイドSETSTATE(INT状態){ 
      this.state =状態。
      notifyAllObservers(); 
   } 

   公共ボイドがアタッチ(観察者の観察者){ 
      observers.add(観察)。		
   } 

   公共ボイドnotifyAllObservers(){ 
      (観察者の観察者:観察者)のための{ 
         observer.update()。
      } 
   } 	 
}

 

ステップ3.コンクリートObserverクラスを作成します。 

1. BinaryObserver 

パブリッククラスBinaryObserverはオブザーバー{延び

   公共BinaryObserver(被写体被写体){ 
      this.subject =主題を、
      this.subject.attach(この); 
   } 

   @Override 
   公共ボイド更新(){ 
      System.out.printlnは( "バイナリ文字列:" + Integer.toBinaryString(subject.getState()))。
   } 
}

 2.  OctalObserver

パブリッククラスOctalObserverはオブザーバー{延び

   公共OctalObserver(被写体被写体){ 
      this.subject =主題を、
      this.subject.attach(この); 
   } 

   @Override 
   公共ボイド更新(){ 
     System.out.printlnは( "オクタル文字列:" + Integer.toOctalString(subject.getState()))。
   } 
}

 3. HexaObserver

パブリッククラスHexaObserverはオブザーバー{延び

   公共HexaObserver(被写体被写体){ 
      this.subject =主題を、
      this.subject.attach(この); 
   } 

   @Override 
   公共ボイド更新(){ 
      System.out.printlnは( "六角文字列:" + Integer.toHexString(subject.getState()).toUpperCase())。
   } 
}

 

ステップ4 ObserverPatternDemo 

パブリッククラスObserverPatternDemo { 
   パブリック静的無効メイン(文字列[] args){ 
      テーマ被写体=新しいテーマ()。

      新しいHexaObserver(サブジェクト)。
      新しいOctalObserver(サブジェクト)。
      新しいBinaryObserver(サブジェクト)。

      System.out.println( "最初の状態変化:15");	
      subject.setState(15)。
      System.out.println( "第二の状態変化:10");	
      subject.setState(10)。
   } 
}

  

 

おすすめ

転載: www.cnblogs.com/codingyangmao/p/11225280.html