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

                >觀察者模式 (observer Pattern): 定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。也叫發布-訂閱模式 ### (一)為什么需要觀察者模式 1,一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作 2,完美的將觀察者和被觀察的對象分離開,使得每個類將重點放在某一個功能上,一個對象只做一件事情。 3,觀察者模式在模塊之間劃定了清晰的界限,提高了應用程序的可維護性和重用性。 ## (二)觀察者模式 UML圖 ![](https://box.kancloud.cn/72c3b4dabe4f04d098a9ccc2a55f6868_903x607.png) ## (三)簡單實例 觀察者模式也叫發布訂閱模式,如果說我們現在在做一個系統。我們讓所有客戶端訂閱我們的服務端,那么當我們的服務端有更新信息的時候,就通知客戶端去更新。這里的服務端就是被觀察者,客戶端就是觀察者。 <?php //抽象被觀察者 abstract class Subject{ //定義一個觀察者數組 private $observers = array(); //增加觀察者方法 public function addObserver(Observer $observer){ $this->observers[] = $observer; echo "添加觀察者成功".PHP_EOL; } //刪除觀察者方法 public function delObserver(Observer $observer){ $key = array_search($observer,$this->observers); //判斷是否有該觀察者存在 if($observer===$this->observers[$key]) { //值雖然相同 但有可能不是同一個對象 ,所以使用全等判斷 unset($this->observers[$key]); echo '刪除觀察者成功'.PHP_EOL; } else{ echo '觀察者不存在,無需刪除'.PHP_EOL; } } //通知所有觀察者 public function notifyObservers(){ foreach($this->observers as $observer){ $observer->update(); } } } //具體被觀察者 服務端 class Server extends Subject{ //具體被觀察者業務 發布一條信息,并通知所有客戶端 public function publish(){ echo '今天天氣很好,我發布了更新包'.PHP_EOL; $this->notifyObservers(); } } //抽象觀察者接口 Interface Observer{ public function update(); } //具體觀察者類 //微信端 class Wechat implements Observer{ public function update(){ echo '通知已接收,微信更新完畢'.PHP_EOL; } } //web端 class Web implements Observer{ public function update(){ echo '通知已接收,web端系統更新中'.PHP_EOL; } } //app端 class App implements Observer{ public function update(){ echo '通知已接收,APP端稍后更新'.PHP_EOL; } } //實例化被觀察者 $server = new Server ; //實例化觀察者 $wechat = new Wechat ; $web = new Web ; $app = new App; //添加被觀察者 $server->addObserver($wechat); $server->addObserver($web); $server->addObserver($app); //被觀察者 發布信息 $server->publish(); //刪除觀察者 $server->delObserver($wechat); //再次發布信息 $server->publish(); //嘗試刪除一個未添加成觀察者的對象 $server->delObserver(new Web); //再次發布信息 $server->publish(); 觀察者模式的一個關鍵詞就是觸發,被觀察者的動作觸發觀察者的做出對應的響應。觀察者模式的另一個常用領域在于插件系統。 在PHP中觀察者的另一種實現方式,是通過實現SplSubject接口和SplObserver。
                  <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>

                              哎呀哎呀视频在线观看