国产探花免费观看_亚洲丰满少妇自慰呻吟_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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄平县| 阳新县| 陇西县| 彰化县| 象州县| 都江堰市| 庐江县| 昌平区| 芜湖县| 华坪县| 称多县| 山阳县| 甘孜| 马关县| 建瓯市| 淮北市| 嘉善县| 房山区| 文成县| 南江县| 伊春市| 曲靖市| 江华| 安福县| 雷波县| 浮梁县| 威海市| 久治县| 江川县| 天等县| 巴塘县| 金昌市| 商城县| 扶沟县| 灌南县| 罗甸县| 图片| 东山县| 锡林浩特市| 蛟河市| 寻乌县|