進修Java設計形式之不雅察者形式。本站提示廣大學習愛好者:(進修Java設計形式之不雅察者形式)文章只能為提供參考,不一定能成為您想要的結果。以下是進修Java設計形式之不雅察者形式正文
以便一個對象的狀況產生變更時,一切依附於它的對象都獲得告訴並產生響應的變更。
不雅察者形式有許多完成方法:該形式必需包括不雅察者和被不雅察對象兩種腳色。不雅察者和被不雅察者之間存在“不雅察”的邏輯關系,當被不雅察者產生轉變的時刻,不雅察者就會不雅察到如許的變更,收回響應的轉變。
/**
* 不雅察者接口:不雅察者,須要用到不雅察者形式的類需完成此接口
*/
public interface Observer
{
public void update(Object obj);
}
/**
* 被不雅察者(普通是籠統類,便利擴大):聲名辦法,產生了某種變更,將變更告訴不雅察者。
*/
public interface BeenObserved
{
public void addObserver(Observer obs);//添加不雅察者對象
public void removeObserver(Observer obs);//不雅察者對象
public void notifyObservers(String changed);//告訴不雅察者對象產生對應變更
}
/**
* 目的被不雅察者:完成被不雅察者的接口,對不雅察者對象停止對應操作
*/
public class ConcreteWatched implements BeenObserved {
// 不雅察者對象聚集
private List<Observer> list = new ArrayList<Observer>();
@Override
public void addObserver(Observer obs)// 添加被不雅察者
{
if (!list.contains(obs)) {
list.add(obs);
}
}
@Override
public void removeObserver(Observer obs)// 不雅察者告知被不雅察者要撤消不雅察,被不雅察者自在器中將不雅察者去除
{
if (list.contains(obs)) {
list.remove(obs);
}
}
@Override
public void notifyObservers(String change) {
// 遍歷對象,分離挪用辦法停止更新告訴操作
for (Observer obs : list) {
obs.update(change);
}
}
}
/**
* 目的被不雅察者(詳細不雅察者)
*/
public class SpecificWatcher implements Observer
{
@Override
public void update(Object obj)
{
System.out.println(obj.toString());//產生的變更
}
}
/**
* 測試代碼
* @description:
*/
public class Test {
public static void main(String[] args)
{
BeenObserved bObs = new ConcreteWatched();
Observer obs1 = new SpecificWatcher();
Observer obs2 = new SpecificWatcher();
Observer obs3 = new SpecificWatcher();
bObs.addObserver(obs1);//添加不雅察者對象
bObs.addObserver(obs2);
bObs.addObserver(obs3);
bObs.notifyObservers("***收到了告訴***");
System.out.println("----------分隔線--------------");
bObs.removeObserver(obs2);//移除不雅察者
bObs.notifyObservers("***少了一個不雅察者***");
}
}
最初打印成果:
以上就是本文的全體內容,願望對年夜家的進修java法式設計有所贊助。