05 Observerパターンオブザーバー

グループは、情報をブロードキャストするときは、オブザーバーパターンを使用することができます

プロデューサー(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 )。

    } 

}

 

おすすめ

転載: www.cnblogs.com/moveofgod/p/12540665.html