时间:2021-07-01 10:21:17 帮助过:19人阅读
- <br><!--?php <BR-->/** <br>* 观察者模式 <br>* <br>* 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新 <br>* 能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能 <br>* 插件系统 <br>*/ <br>class Observerable <br>{ <br>private $_observers = array(); <br><br>public function registerObserver($observer) <br>{ <br>$this->_observers[] = $observer; <br>} <br><br>public function removeObserver($observer) <br>{ <br>$key = array_search($observer,$this->_observers); <br>if(!($key === false)) <br>{ <br>unset($this->_observers[$key]); <br>} <br>} <br><br>public function notifyObservers() <br>{ <br>foreach($this->_observers as $observer) <br>{ <br>if($observer instanceof Observer) $observer->update($this); <br>} <br>} <br>} <br><br>interface Observer <br>{ <br>public function update($observer); <br>} <br><br>interface DisplayElement <br>{ <br>public function display(); <br>} <br><br>// -- 实例类定义 <br>class NewsObserverable extends Observerable <br>{ <br>private $_sports_news; <br>public function setSportsNews($data) <br>{ <br>$this->_sports_news = $data; <br>$this->notifyObservers(); <br>} <br><br>public function getSportsNews() <br>{ <br>return $this->_sports_news; <br>} <br><br>private $_local_news; <br>public function setLocalNews($data) <br>{ <br>$this->_local_news = $data; <br>$this->notifyObservers(); <br>} <br><br>public function getLocalNews() <br>{ <br>return $this->_local_news; <br>} <br>} <br><br>class SportsNews implements Observer,DisplayElement <br>{ <br>private $_data = null; <br>public function update($observer) <br>{ <br>if($this->_data != $observer->getSportsNews()) <br>{ <br>$this->_data = $observer->getSportsNews(); <br>$this->display(); <br>} <br>} <br><br>public function display() <br>{ <br>echo $this->_data.date("Y-m-d H:i:s")."<br>"; <br>} <br>} <br><br>class LocalNews implements Observer,DisplayElement <br>{ <br>private $_data = null; <br>public function update($observer) <br>{ <br>if($this->_data != $observer->getLocalNews()) <br>{ <br>$this->_data = $observer->getLocalNews(); <br>$this->display(); <br>} <br>} <br><br>public function display() <br>{ <br>echo $this->_data.date("Y-m-d H:i:s")."<br>"; <br>} <br>} <br><br>// -- 实例化 --- <br><br>$objObserver = new NewsObserverable(); <br>$local = new LocalNews(); <br>$sports = new SportsNews(); <br><br>$objObserver->registerObserver($local); <br>$objObserver->registerObserver($sports); <br><br>$objObserver->setSportsNews("sports news 1 "); <br>$objObserver->setLocalNews("local news 1 "); <br>$objObserver->removeObserver($sports); <br>$objObserver->setLocalNews("local news 2 "); <br>$objObserver->setSportsNews("sports news 2 "); <br>$objObserver->removeObserver($local); <br>$objObserver->setLocalNews("local news 3 "); <br>
- <p></p>
- <p align="left"><span id="url" itemprop="url">http://www.bkjia.com/PHPjc/323800.html</span><span id="indexUrl" itemprop="indexUrl">www.bkjia.com</span><span id="isOriginal" itemprop="isOriginal">true</span><span id="isBasedOnUrl" itemprop="isBasedOnUrl">http://www.bkjia.com/PHPjc/323800.html</span><span id="genre" itemprop="genre">TechArticle</span><span id="description" itemprop="description"> 代码如下:</span></p><pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li>?php /** * 观察者模式 * * 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都...<p></p></li><li> </li></ol></pre>