-
Observerパターンの定義
Observerパターンの名前が示唆することはしていているオブジェクトを監視対象とモニタがオブジェクトステートフルオブジェクトをリスニングが変更された場合、すべてのオブジェクトがオブザーバ・モードで、独自の応答を、作ってそれを監視し、2つの役割が。私の理解では、このパブリッシュおよびサブスクライブ・モデルは、特定の類似性を有します。
-
コード表示
まずは、シナリオをシミュレートしてみましょう、の生活犯罪者対象としては、監視されている、と警察リスナーとしては、犯罪者を聞くことができます。犯罪者が犯罪行為を行うと、それはあなたがに対応するため、警察に通知することができ、更新イベントをトリガします(もちろん、現実には、受動的な通知です)。ここでは、このシナリオをシミュレートするためにコードすることができます。
私たちは、JDKを表すために使用された観察可能なクラス、提供継承する新しい刑事上のクラスの作成監視対象オブジェクトを。いかなる状態変化がない場合、ステータス更新がある場合、これは、観察クラスによって示され、次の通知方法を実行無効となります。)setChanged(:ここでコアは方法に状態を変化させることです。通知方法:notifyObservers();内部ベクトル集合をすべてのオブザーバに格納され、それはupdate()メソッドのすべてのオブザーバを呼び出します。
1 パッケージcom.hill.observer; 2 。3 インポートjava.util.Observable; 4 5。 / ** 6。 * @author HILL 7。 * @versionのV1.0 8。 * @date 2019年7月21日 9。 *犯罪、各犯罪者は、犯罪者が犯罪をする存在なものになると、警察の叔父をスパイされる 10 *は、最終的に逮捕された、検出されます。 11 * * / 12である パブリック クラス刑事ザが延びる{観測 13である 14 パブリック文字列名; 15 16 公的刑事(文字列名){ 17。 この .nameの= 名; 18である } 。19 20である 公共 ボイドロブ(){ 21である のSystem.out.println(名+ "奪うにREADY" ); 22 // 親観測方法、オブジェクトは、ステータスフラグを変更し 23である )setChanged( ; 24 // すべての警察の叔父を通知は、逮捕することができます。 25の notifyObservers(); 26である } 27 28 }
同様に、私たちが使用し、JDKは、オブザーバーインターフェースが来る、新しい警察のクラスを作成し、このインタフェースのupdate()メソッドは、観測ステータスの更新の対象は、観察者がポリシーの施行に必要がある場合を示すために使用されます。
1 パッケージcom.hill.observer; 2 。3 インポートjava.util.Observable; 4 インポートjava.util.Observer; 5 。6 / ** 7 * @author HILL 。8 * @versionのV1.0 。9 * @date 7分の2019 / 21は、 10 * * / 11 パブリック クラス警察実装オブザーバー{ 12は、 ある13 @Override 14 公共 ボイド(O観測、Argのオブジェクト)更新{ 15 // 犯罪犯罪者の実施形態を認識警官が測定 16 犯罪=犯罪O(刑事) 。17 のSystem.out.println( "警察" + criminal.name + "ハント" ); 18 } 19 }
最後のデモはこれです。
1つの パッケージcom.hill.observer。 2 3 インポートsun.plugin2.message.JavaScriptBaseMessage。 4 5 / ** 6 * @author HILL 7 * @versionのV1.0 8 * @date 2019年7月21日 9 * * / 10 パブリック クラスObserverDemo { 11 12 公共 静的 ボイドメイン(文字列[]引数){ 13 刑事criminal1 = 新刑事( "罪犯1" ); 14 刑事criminal2 = 新しいです( "犯罪2"犯罪;) 15 警察警察= 新しい新ポリス(); 16 // 犯罪警察の監視 17。 criminal1.addObserver(警察); 18である criminal2.addObserver(警察) 。19 20 (criminal1.rob); 21である criminal2 .rob(); 22である 23である } 24 }
-
概要
Observerパターンは、実用的なアプリケーションでは、理解しやすい概念であり、Javaがリスナー(聴取者)でのSwing、Web開発となり、このデザインパターンを使用していました。特定の実装は変化し得るが、それは同じであり、そのうちのいくつかつつ。
- 観察
- 一人の以上の視聴者
- 記録オブザーバのコレクション
- 応答方法と通知方法