横たわるデザインパターンは、(14)を実装-java - オブザーバーモードを

また、公開として知られている観察モード、 -サブスクライブ(パブリッシュ/サブスクライブ)モデルは、多くの観察者1つの依存関係を定義するトピック・オブジェクトを監視同時に複数のオブジェクトを有します。このテーマのオブジェクトと、ステータスの変更は、自動的に更新することを可能、すべてのオブザーバオブジェクトを通知します。
例:
上司がいない場合は仕事で、一部の人々は株式でニュースや表情を見て、リラックスすることができます。上司が戻ってきた場合には、この時間古いバージョンの動きを観察する個人的な瞬間を持っている必要がありますが、我々はすぐに仕事に行くように、すぐに通知します。

テーマ変更が検出された1オブザーバインタフェース、実行される方法。

public interface IObserver {
	
	void goToWork();
	
}

2.実際のオブザーバー

//看新闻的同事
public class NewsObserver1 implements IObserver {

	private String name;
    public NewsObserver(String name) {
       this.name = name;
    }
    
    @Override
    public void goToWork() {
        System.out.println(name + "停止看新闻,开始工作。");
    }

}
//看体育赛事的同事
public class SportsObserver1 implements IObserver {

	private String name;
	
	public SportsObserver(String name) {
		this.name = name;
	}
	
	@Override
	public void goToWork() {
		System.out.println(name + "停止看体育赛事,开始工作。");
	}

}
// 看股票的同事
public class StockObserver1 implements IObserver {
    
    private String name;
    
    public StockObserver(String name) {
        this.name = name;
    }

    @Override
    public void goToWork() {
        System.out.println(name + "停止炒股,开始工作。");
    }
}

3.インターフェースのテーマは、追加オブザーバを削除する責任があり、かつ送信通知

public interface ISubject {
	
	void addObserver(IObserver iObserver);
    void delObserver(IObserver iObserver);
    void bossReturn();
	
}

4.実装クラスのテーマ

import java.util.ArrayList;
import java.util.List;
public class NotifySubject1 implements ISubject {

    List<IObserver> observers;
    
    @Override
    public void addObserver(IObserver iObserver) {
        if (observers == null) {
            observers = new ArrayList<>();
        }
        observers.add(iObserver);
    }

    @Override
    public void delObserver(IObserver iObserver) {
        if (observers == null || observers.isEmpty()) {
            return;
        }
        observers.remove(iObserver);
    }

    // 通知每一个加入过的观察者,去执行主题变更时的方法
    public void notifyObserver() {
        for (IObserver iObserver : observers) {
            iObserver.goToWork();
        }
    }

    @Override
    public void bossReturn() {
        System.out.println("boss回公司了,大家赶紧开始工作");
        notifyObserver();
    }
    
}

メインプログラムコード

//主程序代码
public class Test1 {
	
    public static void main(String[] args) {
    	
        IObserver xiaoMing = new NewsObserver1("小明");
        IObserver xiaoWang = new SportsObserver1("小王");
        IObserver xiaoLi = new StockObserver1("小李");
        
        ISubject boss = new NotifySubject1();
        boss.addObserver(xiaoMing);
        boss.addObserver(xiaoWang);
        boss.addObserver(xiaoLi);
        
        boss.bossReturn();  
            
        System.out.println("=== 这次忘记通知小王了 ===");        
        boss.delObserver(xiaoWang);
        boss.bossReturn();    
        System.out.println("=== 小王被老板逮到了 ===");      
        
    }
    
}

:結果は以下のとおりである
ここに画像を挿入説明
観測クラスとインタフェースjava.utilの提供Javaパッケージもオブザーバーオブザーバーモードを実装することができます。
視聴者のクラスが観察観測クラスインターフェースを実装する、請求setChanged()メソッドを呼び出すときに、観察者の変化が表されている視聴者notifyObservers()メソッドは、オブザーバ更新にインターフェイスを呼び出すとき、この時間は、観測(呼ばれO、オブジェクト引数)方法。呼び出さnotifyObservers(オブジェクト引数)オブザーバメソッド場合、必要なパラメータもaddObserver(観察者O)を通過することができる、deleteObserver(オブザーバーO) 追加する方法、削除ビューア。
次の後のコードの調整:
1.主題カテゴリを観察します

import java.util.Observable;
public class NotifySubject2 extends Observable {
	
    String message;    
    
    public NotifySubject2() {
        message = "你们玩吧,我帮你们观察boss";
        System.out.println("NotifySubject: " + message);
    }
    
    public void bossReturn(){
        message = "boss回公司了,大家赶紧开始工作";
        System.out.println("NotifySubject: " + message);
        setChanged();
        this.notifyObservers(message);
    }
    
}

2.オブザーバークラス

import java.util.Observable;
import java.util.Observer;
//看新闻的同事
public class NewsObserver2 implements Observer {
	
	private String name;
	
	public NewsObserver2(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(name + "收到消息:" + arg + "。 停止看新闻,开始工作。");
	}
	
}
import java.util.Observable;
import java.util.Observer;
//看体育赛事的同事
public class SportsObserver2 implements Observer {
	
	private String name;
	
	public SportsObserver2(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(name + "收到消息:" + arg + "。 停止看体育赛事,开始工作。");
	}
	
}
import java.util.Observable;
import java.util.Observer;
//看股票的同事
public class StockObserver2 implements Observer {
	
	private String name;
	
	public StockObserver2(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(name + "收到消息:" + arg + "。 停止炒股,开始工作。");
	}
	
}

3.メインプログラム:

import java.util.Observer;
//主程序代码
public class Test2 {
	
    public static void main(String[] args) {
    	
        Observer xiaoMing = new NewsObserver2("小明");
        Observer xiaoWang = new SportsObserver2("小王");
        Observer xiaoLi = new StockObserver2("小李");
        
        NotifySubject2 boss = new NotifySubject2();
        boss.addObserver(xiaoLi);
        boss.addObserver(xiaoWang);
        boss.addObserver(xiaoMing);
        boss.bossReturn();
        
        System.out.println("=== 这次忘记通知小王了 ===");
        
        boss.deleteObserver(xiaoWang);;
        boss.bossReturn();
        
        System.out.println("=== 小王被老板逮到了 ===");
        
    }
    
}

:結果は以下のとおりである
ここに画像を挿入説明
具体的な説明オブザーバーと観測現在のクリック可能に

公開された80元の記事 ウォン称賛59 ビュー4353

おすすめ

転載: blog.csdn.net/qq_44458489/article/details/105069320