php中的觀察者模式
更新時(shí)間:2010年03月24日 20:06:50 作者:
可以粗略的理解為,一個(gè)類(我們稱之為被觀察者),這個(gè)類繼承了一個(gè)被觀察者容器的借口
觀察者模式
interface Subject
{
public function Attach($Observer); //添加觀察者
public function Detach($Observer); //踢出觀察者
public function Notify(); //滿足條件時(shí)通知觀察者
public function SubjectState($Subject); //觀察條件
}
class Boss Implements Subject
{
public $_action;
private $_Observer;
public function Attach($Observer)
{
$this->_Observer[] = $Observer;
}
public function Detach($Observer)
{
$ObserverKey = array_search($Observer, $this->_Observer);
if($ObserverKey !== false)
{
unset($this->_Observer[$ObserverKey]);
}
}
public function Notify()
{
foreach($this->_Observer as $value )
{
$value->Update();
}
}
public function SubjectState($Subject)
{
$this->_action = $Subject;
}
}
abstract class Observer
{
protected $_UserName;
protected $_Sub;
public function __construct($Name,$Sub)
{
$this->_UserName = $Name;
$this->_Sub = $Sub;
}
public abstract function Update(); //接收通過(guò)方法
}
class StockObserver extends Observer
{
public function __construct($name,$sub)
{
parent::__construct($name,$sub);
}
public function Update()
{
echo $this->_Sub->_action.$this->_UserName." 你趕快跑...";
}
}
$huhansan = new Boss(); //被觀察者
$gongshil = new StockObserver("三毛",$huhansan); //初始化觀察者
$huhansan->Attach($gongshil); //添加一個(gè)觀察者
$huhansan->Attach($gongshil); //添加一個(gè)相同的觀察者
$huhansan->Detach($gongshil); //踢出基中一個(gè)觀察者
$huhansan->SubjectState("警察來(lái)了"); //達(dá)到滿足的條件
$huhansan->Notify(); //通過(guò)所有有效的觀察者
可以粗略的理解為,一個(gè)類(我們稱之為被觀察者),這個(gè)類繼承了一個(gè)被觀察者容器的借口
該接口中的方法有:添加觀察者,踢出觀察者,提醒觀察者,和觀察條件
添加觀察者即相當(dāng)于把一些類注冊(cè)到這個(gè)容器之中,當(dāng)然這些類的前提是需要有一個(gè)相應(yīng)被觀察者反應(yīng)信息的方法,
被觀察者容器通過(guò)接受不同的觀察條件參數(shù)來(lái)判斷是否需要提醒所有本容器中的已經(jīng)注冊(cè)過(guò)的觀察者是否相應(yīng)
一旦滿足提醒條件,提醒容器內(nèi)所有觀察者讓其調(diào)用相應(yīng)方法并且實(shí)現(xiàn)對(duì)應(yīng)觀察者實(shí)例的變化
暫且理解到此!
復(fù)制代碼 代碼如下:
interface Subject
{
public function Attach($Observer); //添加觀察者
public function Detach($Observer); //踢出觀察者
public function Notify(); //滿足條件時(shí)通知觀察者
public function SubjectState($Subject); //觀察條件
}
class Boss Implements Subject
{
public $_action;
private $_Observer;
public function Attach($Observer)
{
$this->_Observer[] = $Observer;
}
public function Detach($Observer)
{
$ObserverKey = array_search($Observer, $this->_Observer);
if($ObserverKey !== false)
{
unset($this->_Observer[$ObserverKey]);
}
}
public function Notify()
{
foreach($this->_Observer as $value )
{
$value->Update();
}
}
public function SubjectState($Subject)
{
$this->_action = $Subject;
}
}
abstract class Observer
{
protected $_UserName;
protected $_Sub;
public function __construct($Name,$Sub)
{
$this->_UserName = $Name;
$this->_Sub = $Sub;
}
public abstract function Update(); //接收通過(guò)方法
}
class StockObserver extends Observer
{
public function __construct($name,$sub)
{
parent::__construct($name,$sub);
}
public function Update()
{
echo $this->_Sub->_action.$this->_UserName." 你趕快跑...";
}
}
$huhansan = new Boss(); //被觀察者
$gongshil = new StockObserver("三毛",$huhansan); //初始化觀察者
$huhansan->Attach($gongshil); //添加一個(gè)觀察者
$huhansan->Attach($gongshil); //添加一個(gè)相同的觀察者
$huhansan->Detach($gongshil); //踢出基中一個(gè)觀察者
$huhansan->SubjectState("警察來(lái)了"); //達(dá)到滿足的條件
$huhansan->Notify(); //通過(guò)所有有效的觀察者
可以粗略的理解為,一個(gè)類(我們稱之為被觀察者),這個(gè)類繼承了一個(gè)被觀察者容器的借口
該接口中的方法有:添加觀察者,踢出觀察者,提醒觀察者,和觀察條件
添加觀察者即相當(dāng)于把一些類注冊(cè)到這個(gè)容器之中,當(dāng)然這些類的前提是需要有一個(gè)相應(yīng)被觀察者反應(yīng)信息的方法,
被觀察者容器通過(guò)接受不同的觀察條件參數(shù)來(lái)判斷是否需要提醒所有本容器中的已經(jīng)注冊(cè)過(guò)的觀察者是否相應(yīng)
一旦滿足提醒條件,提醒容器內(nèi)所有觀察者讓其調(diào)用相應(yīng)方法并且實(shí)現(xiàn)對(duì)應(yīng)觀察者實(shí)例的變化
暫且理解到此!
您可能感興趣的文章:
- PHP設(shè)計(jì)模式之觀察者模式(Observer)詳細(xì)介紹和代碼實(shí)例
- php觀察者模式應(yīng)用場(chǎng)景實(shí)例詳解
- php中的觀察者模式簡(jiǎn)單實(shí)例
- PHP 設(shè)計(jì)模式之觀察者模式介紹
- php模式設(shè)計(jì)之觀察者模式應(yīng)用實(shí)例分析
- php設(shè)計(jì)模式之適配器模式原理、用法及注意事項(xiàng)詳解
- php設(shè)計(jì)模式之工廠模式用法經(jīng)典實(shí)例分析
- php設(shè)計(jì)模式之單例模式用法經(jīng)典示例分析
- php設(shè)計(jì)模式之職責(zé)鏈模式定義與用法經(jīng)典示例
- PHP 觀察者模式深入理解與應(yīng)用分析
相關(guān)文章
php進(jìn)行md5加密簡(jiǎn)單實(shí)例方法
在本文里小編給大家整理了一篇非常實(shí)用的php如何進(jìn)行md5加密知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。2019-09-09php環(huán)境配置 php5 mysql5 apache2 phpmyadmin安裝與配置
php環(huán)境配置 php5 mysql5 apache2 phpmyadmin安裝與配置...2006-11-11PHP防止sql注入小技巧之sql預(yù)處理原理與實(shí)現(xiàn)方法分析
這篇文章主要介紹了PHP防止sql注入小技巧之sql預(yù)處理原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了PHP防止sql注入的sql預(yù)處理操作詳細(xì)實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2019-12-12PHP實(shí)現(xiàn)微信掃碼登錄功能的兩種方式總結(jié)
這篇文章主要為大家介紹了利用PHP實(shí)現(xiàn)微信掃碼登錄功能的兩種方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)有一定借鑒價(jià)值,需要的可以參考一下2022-08-08淺析關(guān)于PHP位運(yùn)算的簡(jiǎn)單權(quán)限設(shè)計(jì)
本篇文章是對(duì)PHP位運(yùn)算的簡(jiǎn)單權(quán)限設(shè)計(jì)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06