グループは、情報をブロードキャストするときは、オブザーバーパターンを使用することができます
プロデューサー(WeatherDataの天気は) - >サービスメソッド(WeatherDataは、ウェザーステーションとして理解) - >(現在オブザーバのメンテナンスのリストを)観測者(加入者オブザーバー)
天気予報の例:気象検出して、掲示板を使用して公開します
これは、第三者によるアクセスを容易にするため、オープンなAPIが必要です
リアルタイムの測定データの更新、および第三者に通知
オブジェクト:
生産者は、生産者は気象シミュレーションを入れたモデルを、簡単にするために、実際に通常は、別のトピックを生産する生産者のリストがあるはず、加入者はまた、別のトピックをサブスクライブします。
気象ステーション、WeatherData、observerメソッドに与えられた関心の登録と取り消しを提供し、そのオブザーバー最新の気象変化の全てを通知する提供するために、
オブザーバー、オブザーバーは、最新の天候の変化を受けて、表示されました。
パッケージcom.leon.design; パブリック インターフェーステーマ{ ボイドregisterObserver(観察者O)。 空removeObserver(オブザーバー0); 空notifyObservers(); } パッケージcom.leon.design。 パブリック インターフェースオブザーバ{ ボイド更新(INT TEMP)。 無効ディスプレイ(); } パッケージcom.leon.design。 輸入はjava.util.ArrayList; パブリック クラス WeatherData 実装件名{ プライベート int型温度; のArrayList<オブザーバー> オブザーバー。 パブリックWeatherData(){ オブザーバ = 新規のArrayList <オブザーバー> (); } 公共 ボイド設定温度(int型の温度){ この .temperature = 温度。 DoChange(); } 公共 ボイドにDoChange(){ notifyObservers()。 } @Override 公共 ボイドregisterObserver(観察者O){ observer.add(O) } @Override 公共 のボイドremoveObserver(観察者O){ 場合(observer.contains(O)){ observer.remove(O) } } @Override 公共 ボイドnotifyObservers(){ 用(INT I = 0、I <observer.size(); I ++ ){ observer.get(I).update(この.temperature)。 } } } パッケージcom.leon.design。 パブリック クラスシーナ実装オブザーバー{ プライベート int型の温度; @Override 公共 のボイド(更新をINTの温度){ この .TEMP = TEMP。 表示(); } @Override 公共 ボイドディスプレイ(){ System.out.printlnは( "シナがboradcast:温度が" + この "" .TEMP + )。 } } パッケージcom.leon.design。 パブリック クラス Baiduの実装オブザーバー{ プライベート int型の温度; @Override 公共 ボイド更新(int型の温度){ この .TEMP = TEMP。 表示(); } @Override 公共 ボイドディスプレイ(){ System.out.printlnは(:+ "百度boradcast温度は" この "" .TEMP + )。 } } パッケージcom.leon.design。 パブリック クラスObserverClient { 公共 静的 ボイドメイン(文字列[]引数){ WeatherData天気 = 新しいWeatherData()。 オブザーバーシーナ = 新しいシーナ(); オブザーバーチャンネルbaidu = 新百度(); // 注册 weather.registerObserver(シナ)。 weather.registerObserver(百度)。 weather.setTemperature( 100 )。 } }