php中的觀察者模式
更新時間:2010年03月24日 20:06:50 作者:
可以粗略的理解為,一個類(我們稱之為被觀察者),這個類繼承了一個被觀察者容器的借口
觀察者模式
interface Subject
{
public function Attach($Observer); //添加觀察者
public function Detach($Observer); //踢出觀察者
public function Notify(); //滿足條件時通知觀察者
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(); //接收通過方法
}
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); //添加一個觀察者
$huhansan->Attach($gongshil); //添加一個相同的觀察者
$huhansan->Detach($gongshil); //踢出基中一個觀察者
$huhansan->SubjectState("警察來了"); //達(dá)到滿足的條件
$huhansan->Notify(); //通過所有有效的觀察者
可以粗略的理解為,一個類(我們稱之為被觀察者),這個類繼承了一個被觀察者容器的借口
該接口中的方法有:添加觀察者,踢出觀察者,提醒觀察者,和觀察條件
添加觀察者即相當(dāng)于把一些類注冊到這個容器之中,當(dāng)然這些類的前提是需要有一個相應(yīng)被觀察者反應(yīng)信息的方法,
被觀察者容器通過接受不同的觀察條件參數(shù)來判斷是否需要提醒所有本容器中的已經(jīng)注冊過的觀察者是否相應(yīng)
一旦滿足提醒條件,提醒容器內(nèi)所有觀察者讓其調(diào)用相應(yīng)方法并且實現(xiàn)對應(yīng)觀察者實例的變化
暫且理解到此!
復(fù)制代碼 代碼如下:
interface Subject
{
public function Attach($Observer); //添加觀察者
public function Detach($Observer); //踢出觀察者
public function Notify(); //滿足條件時通知觀察者
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(); //接收通過方法
}
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); //添加一個觀察者
$huhansan->Attach($gongshil); //添加一個相同的觀察者
$huhansan->Detach($gongshil); //踢出基中一個觀察者
$huhansan->SubjectState("警察來了"); //達(dá)到滿足的條件
$huhansan->Notify(); //通過所有有效的觀察者
可以粗略的理解為,一個類(我們稱之為被觀察者),這個類繼承了一個被觀察者容器的借口
該接口中的方法有:添加觀察者,踢出觀察者,提醒觀察者,和觀察條件
添加觀察者即相當(dāng)于把一些類注冊到這個容器之中,當(dāng)然這些類的前提是需要有一個相應(yīng)被觀察者反應(yīng)信息的方法,
被觀察者容器通過接受不同的觀察條件參數(shù)來判斷是否需要提醒所有本容器中的已經(jīng)注冊過的觀察者是否相應(yīng)
一旦滿足提醒條件,提醒容器內(nèi)所有觀察者讓其調(diào)用相應(yīng)方法并且實現(xiàn)對應(yīng)觀察者實例的變化
暫且理解到此!
相關(guān)文章
php使用json_decode后數(shù)字對象轉(zhuǎn)換成了科學(xué)計數(shù)法的解決方法
這篇文章主要介紹了php使用json_decode后數(shù)字對象轉(zhuǎn)換成了科學(xué)計數(shù)法的解決方法,涉及php操作json格式數(shù)據(jù)與數(shù)值轉(zhuǎn)換相關(guān)技巧,需要的朋友可以參考下2017-02-02
PHP的mysqli_query參數(shù)MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的區(qū)別
這篇文章主要介紹了PHP的mysqli_query參數(shù)MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的區(qū)別,本文給出了這兩個參數(shù)的5個區(qū)別,需要的朋友可以參考下2014-09-09
深入file_get_contents與curl函數(shù)的詳解
本篇文章是對file_get_contents與curl函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php使用pdo連接并查詢sql數(shù)據(jù)庫的方法
這篇文章主要介紹了php使用pdo連接并查詢sql數(shù)據(jù)庫的方法,實例分析了常用的pdo連接方法與改進(jìn)方法,并針對pdo技術(shù)進(jìn)行了分析說明,需要的朋友可以參考下2014-12-12
PHP刪除特定數(shù)組內(nèi)容并且重建數(shù)組索引的方法.
我們知道.PHP沒有提供專門刪除一個特定數(shù)組元素的方法.但是可以通過unset()函數(shù)來完成.2011-03-03

