php設(shè)計模式 Observer(觀察者模式)
更新時間:2011年06月26日 10:51:44 作者:
定義對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新 能夠便利地創(chuàng)建查看目標(biāo)對象狀態(tài)的對象,并且提供與核心對象非耦合的指定功能
復(fù)制代碼 代碼如下:
<?php
/**
* 觀察者模式
*
* 定義對象間的一種一對多的依賴關(guān)系,以便當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動刷新
* 能夠便利地創(chuàng)建查看目標(biāo)對象狀態(tài)的對象,并且提供與核心對象非耦合的指定功能
* 插件系統(tǒng)
*/
class Observerable
{
private $_observers = array();
public function registerObserver($observer)
{
$this->_observers[] = $observer;
}
public function removeObserver($observer)
{
$key = array_search($observer,$this->_observers);
if(!($key === false))
{
unset($this->_observers[$key]);
}
}
public function notifyObservers()
{
foreach($this->_observers as $observer)
{
if($observer instanceof Observer) $observer->update($this);
}
}
}
interface Observer
{
public function update($observer);
}
interface DisplayElement
{
public function display();
}
// -- 實例類定義
class NewsObserverable extends Observerable
{
private $_sports_news;
public function setSportsNews($data)
{
$this->_sports_news = $data;
$this->notifyObservers();
}
public function getSportsNews()
{
return $this->_sports_news;
}
private $_local_news;
public function setLocalNews($data)
{
$this->_local_news = $data;
$this->notifyObservers();
}
public function getLocalNews()
{
return $this->_local_news;
}
}
class SportsNews implements Observer,DisplayElement
{
private $_data = null;
public function update($observer)
{
if($this->_data != $observer->getSportsNews())
{
$this->_data = $observer->getSportsNews();
$this->display();
}
}
public function display()
{
echo $this->_data.date("Y-m-d H:i:s")."<br/>";
}
}
class LocalNews implements Observer,DisplayElement
{
private $_data = null;
public function update($observer)
{
if($this->_data != $observer->getLocalNews())
{
$this->_data = $observer->getLocalNews();
$this->display();
}
}
public function display()
{
echo $this->_data.date("Y-m-d H:i:s")."<br/>";
}
}
// -- 實例化 ---
$objObserver = new NewsObserverable();
$local = new LocalNews();
$sports = new SportsNews();
$objObserver->registerObserver($local);
$objObserver->registerObserver($sports);
$objObserver->setSportsNews("sports news 1 ");
$objObserver->setLocalNews("local news 1 ");
$objObserver->removeObserver($sports);
$objObserver->setLocalNews("local news 2 ");
$objObserver->setSportsNews("sports news 2 ");
$objObserver->removeObserver($local);
$objObserver->setLocalNews("local news 3 ");
您可能感興趣的文章:
- PHP設(shè)計模式之觀察者模式(Observer)詳細介紹和代碼實例
- PHP中常用的三種設(shè)計模式詳解【單例模式、工廠模式、觀察者模式】
- PHP設(shè)計模式之觀察者模式定義與用法示例
- PHP設(shè)計模式之中介者模式(Mediator Pattern)入門與應(yīng)用案例詳解
- PHP設(shè)計模式之迭代器(Iterator)模式入門與應(yīng)用詳解
- PHP設(shè)計模式之解釋器(Interpreter)模式入門與應(yīng)用詳解
- PHP設(shè)計模式之工廠模式(Factory)入門與應(yīng)用詳解
- php設(shè)計模式之適配器模式原理、用法及注意事項詳解
- php設(shè)計模式 Template (模板模式)
- php設(shè)計模式 Proxy (代理模式)
- PHP常用的三種設(shè)計模式匯總
- PHP設(shè)計模式之觀察者模式入門與應(yīng)用案例詳解
相關(guān)文章
php過濾所有惡意字符(批量過濾post,get敏感數(shù)據(jù))
最近dedecms報漏洞不斷,這里分享下php的過濾函數(shù),大牛飄過吧,給小黑闊們學(xué)習(xí)交流用2014-03-03PHP實現(xiàn)向關(guān)聯(lián)數(shù)組指定的Key之前插入元素的方法
這篇文章主要介紹了PHP實現(xiàn)向關(guān)聯(lián)數(shù)組指定的Key之前插入元素的方法,涉及php針對數(shù)組的遍歷、判斷、獲取、插入等相關(guān)操作技巧,需要的朋友可以參考下2017-06-06php用數(shù)組返回?zé)o限分類的列表數(shù)據(jù)的代碼
php自定義函數(shù)之用數(shù)組返回?zé)o限分類的列表數(shù)據(jù),這樣的實現(xiàn)可以提高執(zhí)行的效率不要每次都從數(shù)據(jù)庫讀取數(shù)據(jù)。2010-08-08PHP基于curl post實現(xiàn)發(fā)送url及相關(guān)中文亂碼問題解決方法
這篇文章主要介紹了PHP基于curl post實現(xiàn)發(fā)送url及相關(guān)中文亂碼問題解決方法,結(jié)合具體實例形式分析了php使用curl實現(xiàn)post數(shù)據(jù)發(fā)送及content-type相關(guān)設(shè)置操作技巧,需要的朋友可以參考下2017-11-11PHP采用get獲取url漢字出現(xiàn)亂碼的解決方法
這篇文章主要介紹了PHP采用get獲取url漢字出現(xiàn)亂碼的解決方法,是很多PHP程序員都曾遇到的問題,非常具有實用價值,需要的朋友可以參考下2014-11-11