国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

學習Java設計模式之觀察者模式

2019-11-26 14:40:14
字體:
來源:轉載
供稿:網友
  • 觀察者模式:對象間的一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象(被觀察)。

以便一個對象的狀態發生變化時,所有依賴于它的對象都得到通知并發生相應的變化。
觀察者模式有很多實現方式:該模式必須包含觀察者和被觀察對象兩種角色。觀察者和被觀察者之間存在“觀察”的邏輯關系,當被觀察者發生改變的時候,觀察者就會觀察到這樣的變化,發出相應的改變。

/** * 觀察者接口:觀察者,需要用到觀察者模式的類需實現此接口 */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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淅川县| 乐平市| 祁阳县| 乌鲁木齐县| 鄱阳县| 呼图壁县| 温宿县| 平遥县| 缙云县| 同仁县| 石家庄市| 霞浦县| 涟源市| 成都市| 鄯善县| 石狮市| 抚远县| 双江| 澄迈县| 卢氏县| 前郭尔| 北流市| 金华市| 思南县| 岢岚县| 安阳市| 太谷县| 图木舒克市| 秭归县| 苍梧县| 青海省| 桃源县| 云安县| 高台县| 勐海县| 岳西县| 灵川县| 武城县| 平南县| 武城县| 呼和浩特市|