程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 進修Java設計形式之不雅察者形式

進修Java設計形式之不雅察者形式

編輯:關於JAVA

進修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法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved