<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 觀察者模式 Observer Pattern,指多個對象間存在一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。這種模式有時又稱作發布-訂閱模式。 &nbsp; ## 組成 1. 抽象主題(Subject):抽象目標類,包含了一組觀察者對象及對觀察者管理、通知的方法。 2. 具體主題:具體目標類,實現抽象目標類的通知方法,當具體主題的內部狀態發生改變時,通過所有注冊過的觀察者對象。 3. 抽象觀察者(Observer):抽象類或者接口,包含一個更新自己的抽象方法,當收到具體主題的更改通知時被調用。 4. 具體觀察者:實現抽象觀察者中定義的抽象方法,以便在具體目標類更改時及時更新自身內容。 :-: ![](https://img.kancloud.cn/88/cb/88cbe0acc068359ffa442d4304a25b6b_590x462.png) 【圖片來源:http://c.biancheng.net/view/1390.html】 實現舉例: ~~~ package net.biancheng.c.observer; import java.util.*; public class ObserverPattern { public static void main(String[] args) { Subject subject = new ConcreteSubject(); Observer obs1 = new ConcreteObserver1(); Observer obs2 = new ConcreteObserver2(); subject.add(obs1); subject.add(obs2); subject.notifyObserver(); } } //抽象目標 abstract class Subject { protected List<Observer> observers = new ArrayList<Observer>(); //增加觀察者方法 public void add(Observer observer) { observers.add(observer); } //刪除觀察者方法 public void remove(Observer observer) { observers.remove(observer); } public abstract void notifyObserver(); //通知觀察者方法 } //具體目標 class ConcreteSubject extends Subject { public void notifyObserver() { System.out.println("具體目標發生改變..."); System.out.println("--------------"); for (Object obs : observers) { ((Observer) obs).response(); } } } //抽象觀察者 interface Observer { void response(); //反應 } //具體觀察者1 class ConcreteObserver1 implements Observer { public void response() { System.out.println("具體觀察者1作出反應!"); } } //具體觀察者1 class ConcreteObserver2 implements Observer { public void response() { System.out.println("具體觀察者2作出反應!"); } } ~~~ &nbsp; 注意事項: 1. 避免循環依賴 2. 避免順序執行時,某一觀察者錯誤導致系統卡頓,一般采用異步的方式。 &nbsp; JDK使用: 1. java.util.Observable和java.util.Observer接口定義了觀察者模式。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看