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

首頁 > 開發 > PHP > 正文

PHP 設計模式之觀察者模式介紹

2024-05-04 23:15:28
字體:
來源:轉載
供稿:網友
介紹
觀察者模式定義對象的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知并自動更新!
設計原則
在觀察者模式中,會改變的是主題的狀態以及觀察者的數目。用這個模式,你可以改變依賴于主題狀態的對象,卻不必改變主題。——找出程序中會變化的方面,然后將其和固定不變的方面相分離!
主題和觀察者都使用接口:觀察者利用主題的接口向主題注冊,而主題利用觀察者接口通知觀察者。這樣可以讓兩者之間運作正常,又同時具有松耦合的優點! ——針對接口編程,不針對實現編程!

觀察者模式利用“組合”將許多觀察者組合進主題中。對象(觀察者——主題)之間的這種關系不是通過繼承產生的,而是在運行時利用組合的方式產生的。 ——多用組合,少用繼承!
代碼

復制代碼 代碼如下:


<?php
/**
* 觀察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主題 */
private $_observers = array();
public function register($sub){ /* 注冊觀察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部統一訪問 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 觀察者要實現的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback/n";
}
}
//下面是測試代碼
?
/* 測試 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();



總結

當新對象要填入的時候,只需要在主題(又叫可觀察者)中進行注冊(注冊方式很多,你也可以在構造的時候,或者框架訪問的接口中進行注冊),然后實現代碼直接在新對象的接口中進行。這降低了主題對象和觀察者對象的耦合度。

好的設計模式不會直接進入你的代碼中,而是進入你的大腦中。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 竹溪县| 蓝田县| 玉树县| 瑞金市| 巴彦县| 新建县| 义马市| 安陆市| 舞钢市| 京山县| 北安市| 临城县| 沿河| 赤城县| 芒康县| 南岸区| 岳阳县| 阿拉善右旗| 巴林左旗| 天水市| 武鸣县| 高淳县| 芦山县| 天气| 广丰县| 区。| 桂阳县| 米易县| 苗栗县| 浑源县| 阜宁县| 海丰县| 巴塘县| 秭归县| 罗定市| 泰兴市| 德阳市| 锦州市| 当雄县| 开封市| 山东|