<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 第9章 觀察者模式 ### 觀察者模式 1. 觀察者模式(Observer),當一個對象狀態發生改變時,依賴它的對象全部會受到通知,并自動更新 2. 場景:一個事件發送后,要執行一連串更新操作。傳統的編程方式,就是在事件的代碼之后直接加入處理邏輯。當更新的邏輯增多之后,代碼會變得難以維護。這種方式是耦合的,侵入式的,增加新的邏輯需要修改事件主體的代碼 3. 觀察者模式實現了低耦合,非侵入式的通知與更新機制 ### 第一步:傳統方法實例 ~~~ // 聲明1個事件類 class Event { // 觸發事件 function trigger() { echo "Event<br />"; // 添加更新 echo "邏輯1"; echo "邏輯2"; echo "邏輯3"; } } $event = new Event(); $event->trigger(); ~~~ 這種方式,隨著項目越來越大,維護起來會越來越難,代碼時耦合的、侵入式的。更好的方法是不影響主體部分,這就使用到觀察者模式了。 ### 第二步:聲明1個事件觸發的接口類 *D:\wamp\www\demo\oop\framework\Think\EventGenerator.php* ~~~ <?php namespace Think; abstract class EventGenerator { private $observers = array(); // 添加1個觀察者 function addObserver(Observer $observer) { $this->observers[] = $observer; } // 通知觀察者,執行更新操作 function notify() { foreach ($this->observers as $observer) { $observer->update(); } } } ~~~ ### 第三步:聲明1個觀察者的基類 *D:\wamp\www\demo\oop\framework\Think\Observer.php* ~~~ <?php namespace Think; interface Observer { function update($event_info = null); } ~~~ ### 第四步:添加2個觀察者邏輯 *D:\wamp\www\demo\oop\framework\index.php* ~~~ class Observer1 implements Think\Observer { function update($event_info = null) { echo "邏輯1<br />"; } } class Observer2 implements Think\Observer { function update($event_info = null) { echo "邏輯2<br />"; } } ~~~ 聲明2個觀察者繼承觀察者的接口類,并實現 `update` 的方法 我們的新增加的代碼邏輯呢,就分離成為了觀察者。 ### 第五步:讓事件類觸發事件觸發的抽象類 *D:\wamp\www\demo\oop\framework\index.php* ~~~ class Event extends Think\EventGenerator { function trigger() { echo "Event<br />"; $this->notify(); } } ~~~ 事件執行完以后,執行基類中的`notify()`通知觀察者。 ~~~ $event = new Event(); $event->addObserver(new Observer1); $event->addObserver(new Observer2); $event->trigger(); ~~~
                  <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>

                              哎呀哎呀视频在线观看