国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php設(shè)計模式之觀察者模式的應(yīng)用詳解

2024-05-04 21:53:42
字體:
供稿:網(wǎng)友

 觀察者模式:定義對象間一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。
觀察者類:
1.抽象主題角色:主題角色將所有對觀察者對象的引用保存在一個集合中,每個主題可以任意多個觀察者。抽象主題提供了增加和刪除觀察者對象的接口。
2.抽象觀察者角色:為所有的具體觀察者定義一個接口,在觀察的主題發(fā)生改變時更新自己
3.具體主題角色:存儲相關(guān)狀態(tài)到具體觀察者對象,當(dāng)具體主題的內(nèi)部狀態(tài)發(fā)生改變時,給所有登記過的觀察者發(fā)出通知。具體主題角色通常用一個具體子類實現(xiàn)。
4.具體觀察者角色:存儲一個具體主題對象,存儲相關(guān)狀態(tài),實現(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();
//新增第一個觀察者
$observer1 = new ConcreteObserver('Martin');
$subject->attach($observer1);
//通知
$subject->notifyObservers();

//新增第二個觀察者
$observer2 = new ConcreteObserver('jaky');
$subject->attach($observer2);
//通知
$subject->notifyObservers();

//刪除觀察者1
$subject->deatch($observer1);
//通知
$subject->notifyObservers();
}
}

Client::main();
?>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桃源县| 龙海市| 太仆寺旗| 兴城市| 公主岭市| 冀州市| 富阳市| 宁明县| 嘉义县| 枣庄市| 来凤县| 兴义市| 巴青县| 元谋县| 确山县| 孟州市| 汕头市| 正镶白旗| 曲水县| 汝州市| 建德市| 万盛区| 溧水县| 基隆市| 东阳市| 武城县| 开平市| 普定县| 巴林左旗| 衡阳市| 拉萨市| 彩票| 临城县| 迁安市| 彰化市| 湖州市| 崇州市| 芒康县| 定结县| 柳江县| 贵阳市|