亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php面向對象:觀察者模式示例

2024-09-04 11:43:48
字體:
來源:轉載
供稿:網友

觀察者模式也是php面向對象中的一個不常用的模式了,下面我們一起來看看php面向對象:觀察者模式示例,希望對給各位帶來幫助.

意圖:定義對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新【GOF95】,又稱為發布-訂閱(Publish-Subscribe)模式、模型-視圖(Model-View)模式、源-監聽(Source-Listener)模式、或從屬者(Dependents)模式.

主要角色:抽象主題(Subject)角色:主題角色將所有對觀察者對象的引用保存在一個集合中,每個主題可以有任意多個觀察者,抽象主題提供了增加和刪除觀察者對象的接口.

抽象觀察者(Observer)角色:為所有的具體觀察者定義一個接口,在觀察的主題發生改變時更新自己.

具體主題(ConcreteSubject)角色:存儲相關狀態到具體觀察者對象,當具體主題的內部狀態改變時,給所有登記過的觀察者發出通知,具體主題角色通常用一個具體子類實現.

具體觀察者(ConcretedObserver)角色:存儲一個具體主題對象,存儲相關狀態,實現抽象觀察者角色所要求的更新接口,以使得其自身狀態和主題的狀態保持一致.

優點和缺點

優點:觀察者和主題之間的耦合度較小,支持廣播通信.

缺點:由于觀察者并不知道其它觀察者的存在,它可能對改變目標的最終代價一無所知,這可能會引起意外的更新.

適用場景

當一個抽象模型有兩個方面,其中一個方面依賴于另一個方面,當對一個對象的改變需要同時改變其它對象,而不知道具體有多少個對象待改變.

當一個對象必須通知其它對象,而它又不能假定其它對象是誰,換句話說,你不希望這些對象是緊密耦合的.實現代碼:

  1. <?php 
  2.  
  3. /** 
  4. * 觀察者模式 
  5.  
  6. * @package design pattern 
  7. */ 
  8.  
  9. /** 
  10. * 抽象主題角色 
  11. */ 
  12. interface Subject { 
  13.  
  14.     /** 
  15.      * 增加一個新的觀察者對象 
  16.      * @param Observer $observer 
  17.      */ 
  18.     public function attach(Observer $observer); 
  19.  
  20.     /** 
  21.      * 刪除一個已注冊過的觀察者對象 
  22.      * @param Observer $observer 
  23.      */ 
  24.     public function detach(Observer $observer); 
  25.  
  26.     /** 
  27.      * 通知所有注冊過的觀察者對象 
  28.      */ 
  29.     public function notifyObservers(); 
  30.  
  31. /** 
  32. * 具體主題角色 
  33. */ 
  34. class ConcreteSubject implements Subject { 
  35.  
  36.     private $_observers
  37.  
  38.     public function __construct() { 
  39.         $this->_observers = array(); 
  40.     } 
  41.  
  42.     /** 
  43.      * 增加一個新的觀察者對象 
  44.      * @param Observer $observer 
  45.      */ 
  46.     public function attach(Observer $observer) { 
  47.         return array_push($this->_observers, $observer); 
  48.     } 
  49.  
  50.     /** 
  51.      * 刪除一個已注冊過的觀察者對象 
  52.      * @param Observer $observer 
  53.      */ 
  54.     public function detach(Observer $observer) { 
  55.         $index = array_search($observer$this->_observers); 
  56.         if ($index === FALSE || ! array_key_exists($index$this->_observers)) { 
  57.             return FALSE; 
  58.         } 
  59.  
  60.         unset($this->_observers[$index]); 
  61.         return TRUE; 
  62.     } 
  63.  
  64.     /** 
  65.      * 通知所有注冊過的觀察者對象 
  66.      */ 
  67.     public function notifyObservers() { 
  68.         if (!is_array($this->_observers)) { 
  69.             return FALSE; 
  70.         } 
  71.  
  72.         foreach ($this->_observers as $observer) { 
  73.             $observer->update(); 
  74.         } 
  75.  
  76.         return TRUE; 
  77.     } 
  78.  
  79.  
  80. /** 
  81. * 抽象觀察者角色 
  82. */ 
  83. interface Observer { 
  84.  
  85.     /** 
  86.      * 更新方法 
  87.      */ 
  88.     public function update(); 
  89.  
  90. class ConcreteObserver implements Observer { 
  91.  
  92.     /** 
  93.      * 觀察者的名稱 
  94.      * @var <type> 
  95.      */ 
  96.     private $_name
  97.  
  98.     public function __construct($name) { 
  99.         $this->_name = $name
  100.     } 
  101.  
  102.     /** 
  103.      * 更新方法 
  104.      */ 
  105.     public function update() { 
  106.         echo 'Observer'$this->_name, ' has notified.<br />'
  107.     }  //開源軟件:Vevb.com 
  108.  
  109.  
  110.    $subject = new ConcreteSubject(); 
  111.  
  112.         /* 添加第一個觀察者 */ 
  113.         $observer1 = new ConcreteObserver('Martin'); 
  114.         $subject->attach($observer1); 
  115.  
  116.         echo '<br /> The First notify:<br />'
  117.         $subject->notifyObservers(); 
  118.  
  119.         /* 添加第二個觀察者 */ 
  120.         $observer2 = new ConcreteObserver('phppan'); 
  121.         $subject->attach($observer2); 
  122.  
  123.         echo '<br /> The Second notify:<br />'
  124.         $subject->notifyObservers(); 
  125.  
  126.         /* 刪除第一個觀察者 */ 
  127.         $subject->detach($observer1); 
  128.  
  129.         echo '<br /> The Third notify:<br />'
  130.         $subject->notifyObservers(); 
  131. ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区三区毛片淫片| 国产日韩欧美影视| 日韩精品日韩在线观看| 亚洲春色另类小说| 亚洲人成在线观看网站高清| 亚洲欧美一区二区激情| 亚洲福利在线观看| 亚洲精品一区二区三区婷婷月| 欧美性理论片在线观看片免费| 久久青草精品视频免费观看| 日本精品性网站在线观看| 亚洲国产精品一区二区久| 91色视频在线导航| 亚洲欧洲在线免费| 91精品国产高清自在线| 亚洲小视频在线观看| 久久久999成人| 成人黄色av播放免费| 538国产精品视频一区二区| 日韩精品视频在线观看网址| 91精品综合久久久久久五月天| 国产日韩欧美在线视频观看| 久久久久久久999| 在线播放日韩av| 国产精品精品视频| 欧美激情欧美激情| 91九色综合久久| 5566日本婷婷色中文字幕97| 欧美日韩国产成人在线| 2019中文字幕全在线观看| 国产精品户外野外| 7m第一福利500精品视频| 欧美日韩高清区| 精品国产一区二区三区久久狼黑人| 欧美福利视频网站| 久久精品国产99国产精品澳门| 一本色道久久88综合亚洲精品ⅰ| 国产成人小视频在线观看| 国产精品久久久久久久久男| 国产亚洲精品久久久| 国产精品久久久久久久美男| 中文字幕精品一区久久久久| 综合136福利视频在线| 亚洲精品suv精品一区二区| 欧美三级xxx| 一区二区三区视频免费在线观看| 久久夜精品va视频免费观看| 久久精品青青大伊人av| 欧美精品18videos性欧| 3344国产精品免费看| 亚洲xxx自由成熟| 欧美在线观看网站| 精品国产999| 久久av资源网站| 欧美精品videosex极品1| 精品美女永久免费视频| 亚洲精品在线91| 国产精品极品尤物在线观看| 亚洲一二三在线| 亚洲精品狠狠操| 久久综合色影院| 精品国产91乱高清在线观看| 夜夜嗨av一区二区三区免费区| 亚洲国产精品系列| 欧美刺激性大交免费视频| 夜夜狂射影院欧美极品| 96pao国产成视频永久免费| 日韩国产精品一区| 富二代精品短视频| 日韩欧美在线视频免费观看| 久久国产精品久久精品| 伊人久久男人天堂| 午夜精品久久久久久久99黑人| 日韩国产高清污视频在线观看| 成人在线观看视频网站| 亚洲精品在线看| 欧美影院久久久| 亚洲免费伊人电影在线观看av| 久久99精品视频一区97| 中文国产成人精品久久一| 国产精品一区av| 欧美肥老妇视频| 久久久久久中文| 国产精品白嫩初高中害羞小美女| 中日韩美女免费视频网址在线观看| 国产精品免费久久久| 欧美超级乱淫片喷水| 国产精品1区2区在线观看| 国产精品视频一区二区三区四| 亚洲国产成人av在线| 成人激情在线观看| 欧美性xxxxxxxxx| 精品亚洲一区二区三区在线播放| 久久久久久69| 国产一区二区成人| 狠狠躁天天躁日日躁欧美| 国产精品黄页免费高清在线观看| 免费91在线视频| 色婷婷综合成人| 91九色综合久久| 亚洲免费成人av电影| 日本亚洲欧洲色α| 欧美一性一乱一交一视频| 精品人伦一区二区三区蜜桃免费| 欧美体内谢she精2性欧美| 欧美性猛交视频| 久久久久久久久久亚洲| 久久中国妇女中文字幕| 91在线直播亚洲| 国产一区二区久久精品| 性色av香蕉一区二区| 欧美日韩国产在线| 欧美日韩一二三四五区| 精品国产拍在线观看| 欧美专区福利在线| 一区二区日韩精品| 岛国av一区二区| 亚洲免费中文字幕| 一区二区欧美在线| 欧美激情va永久在线播放| 亚洲bt天天射| 国产欧美日韩中文字幕在线| 亚洲色图50p| 久久亚洲国产精品成人av秋霞| 亚洲乱码av中文一区二区| 韩国精品美女www爽爽爽视频| 中文字幕无线精品亚洲乱码一区| 国产91亚洲精品| 欧美性xxxxxxxxx| 26uuu日韩精品一区二区| 久久久久久尹人网香蕉| 国产深夜精品福利| 久久久国产视频91| 最近日韩中文字幕中文| 国产精品女人网站| 国产成人高清激情视频在线观看| 亚洲视频自拍偷拍| 久久久久久久影院| 欧美日韩免费在线观看| 操日韩av在线电影| 中文字幕日韩在线播放| 啊v视频在线一区二区三区| 国产成人精品网站| 久久久国产视频| 久久国产精品影片| 狠狠躁夜夜躁久久躁别揉| 国产精品久久久久久五月尺| 国产精品国产三级国产专播精品人| 成人久久久久久| 日韩成人在线视频网站| 国产女人精品视频| 国产精品永久免费在线| 一本色道久久88精品综合| 国产精品久久久久久久久久尿| 欧美激情a∨在线视频播放| 亚洲缚视频在线观看| 国产91热爆ts人妖在线| 亚洲视频在线观看| 中文字幕日韩av| 国产精品男人的天堂| 欧美性猛交xxxx免费看漫画| 久久久久久久久久久久av| 久久天天躁狠狠躁夜夜躁2014| 97国产精品人人爽人人做|