一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 學習Java設計模式之觀察者模式

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

2019-06-16 21:25BetterLaterThanNever 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設計模式之觀察者模式

以上就是本文的全部內容,希望對大家的學習java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 爱操综合网 | 国产东北3p真实在线456视频 | 五月天在线视频观看 | 亚洲成av人片天堂网 | 亚洲视频在线观看不卡 | 亚欧洲乱码专区视频 | 亚洲a视频在线 | 插入逼 | 99爱在线观看精品视频 | 亚洲性夜 | 男男playh片在线观看 | 天天操天天射天天爽 | 国产啪精品视频网给免丝袜 | 含羞草传媒一天免费看下 | 视频在线免费看 | 加勒比成人 | 91啦丨porny丨蝌蚪 | 男男同志videos | 日韩精品成人a在线观看 | 嫩交18xxxx| 国内精品久久久久久不卡影院 | 美女脱了内裤打开腿让你桶爽 | 欧美日韩亚洲第一区在线 | 欧美一级久久久久久久大片 | 日本免费在线观看视频 | 好姑娘在线视频观看免费 | 国产欧美日韩一区二区三区在线 | 亚洲AV无码偷拍在线观看 | 91视在线国内在线播放酒店 | 亚洲天堂精品在线观看 | 亚洲 欧美 制服 校园 动漫 | 无人影院在线播放视频 | 希岛爱理aⅴ在线中文字幕 午夜综合网 | 西野翔全部作品在线观看 | 成年美女黄网色大观看全 | 精品国产视频 | 欧美一区二区三区久久久 | 从后面撕开老师的丝袜动态图 | 日本国产一区二区三区 | 东北恋哥在线播放免费播放 | 亚洲人成高清毛片 |