php設(shè)計(jì)模式之觀察者模式的應(yīng)用詳解_PHP教程
推薦:php設(shè)計(jì)模式之命令模式的應(yīng)用詳解命令模式:將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤銷操作。 命令類: 1.命令角色:聲明了一個(gè)給所有具體命令類的抽象接口。這是一個(gè)抽象角色。 2.具體命令角色:定義一個(gè)接受者和行為之間的弱耦合;
觀察者模式:定義對(duì)象間一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都得到通知并自動(dòng)更新。
觀察者類:
1.抽象主題角色:主題角色將所有對(duì)觀察者對(duì)象的引用保存在一個(gè)集合中,每個(gè)主題可以任意多個(gè)觀察者。抽象主題提供了增加和刪除觀察者對(duì)象的接口。
2.抽象觀察者角色:為所有的具體觀察者定義一個(gè)接口,在觀察的主題發(fā)生改變時(shí)更新自己
3.具體主題角色:存儲(chǔ)相關(guān)狀態(tài)到具體觀察者對(duì)象,當(dāng)具體主題的內(nèi)部狀態(tài)發(fā)生改變時(shí),給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個(gè)具體子類實(shí)現(xiàn)。
4.具體觀察者角色:存儲(chǔ)一個(gè)具體主題對(duì)象,存儲(chǔ)相關(guān)狀態(tài),實(shí)現(xiàn)抽象觀察者角色所要求的更新接口,以使得其自身狀態(tài)和主題的狀態(tài)保持一致
作用:
1. 觀察者模式的耦合度較小
2.支持廣播通信
<?php
//抽象主題
interface Subject{
public function attach($observer);
public function detach($observer);
public function notifyObservers();
}
//具體主題
class ConcreateSubject implements Subject{
private $_observers;
public function __construct(){
$this->_observers = array();
}
public function attach($observer){
return array_push($this->_observers,$observer);
}
public function detach($observer){
$index = array_search($observer,$this->_observers);
if($index === false || !array_key_exists($index,$this->_observers)){
return false;
}
unset($this->_observer[$index]);
return true;
}
public function notifyObservers(){
if(!is_array($this->_observers)){
return false;
}
foreach($this->_observers as $observer){
$observer->update();
}
return true;
}
}
//抽象觀察者
interface Observer{
public function update();
}
//具體觀察者
class ConcreteObserver implement Observer{
private $_name;
public function __construct($name){
$this->_name = $name;
}
public function update(){
echo 'Observer',$this->_name.'has notified<br/>';
}
}
//客戶端
class Client{
public static function main(){
$subject = new ConcreteSubject();
//新增第一個(gè)觀察者
$observer1 = new ConcreteObserver('Martin');
$subject->attach($observer1);
//通知
$subject->notifyObservers();
//新增第二個(gè)觀察者
$observer2 = new ConcreteObserver('jaky');
$subject->attach($observer2);
//通知
$subject->notifyObservers();
//刪除觀察者1
$subject->deatch($observer1);
//通知
$subject->notifyObservers();
}
}
Client::main();
?>
分享:PHP與C#的值類型指向區(qū)別PH和C#的值拷貝區(qū)別(如果哪里說的不對(duì),還望指出!) $a = 2; $b = $a; //在php中這里把b的地址指向a 所以b此時(shí)也等于2;區(qū)別就在這 $a = 5; //這時(shí)php中a的值又重新寫值,所以php核心這時(shí)才會(huì)把b重新分配一個(gè)地址,然后把a(bǔ)原先的值進(jìn)行拷貝。這就是 寫時(shí)拷貝 原理 , 也
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 解析PHP動(dòng)態(tài)網(wǎng)頁技術(shù)中SESSION的應(yīng)用
- 解析php DOMElement 操作xml 文檔的實(shí)現(xiàn)代碼
- PHP計(jì)算頁面執(zhí)行時(shí)間
- PHP中isset和empty函數(shù)的區(qū)別
- 談PHP識(shí)別24位BMP的驗(yàn)證碼
- php修改NetBeans默認(rèn)字體的大小
- CI鏈接操作多個(gè)數(shù)據(jù)庫(kù)
- web上存漏洞及原理分析、防范方法(文件名檢測(cè)漏洞)
- 實(shí)現(xiàn)dedecms圖集單擊圖片翻頁的功能
- php selectradio和checkbox默認(rèn)選擇的實(shí)現(xiàn)方法詳解
- 相關(guān)鏈接:
- 教程說明:
PHP教程-php設(shè)計(jì)模式之觀察者模式的應(yīng)用詳解
。