色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

PHP 設(shè)計(jì)模式之觀察者模式介紹

介紹
觀察者模式定義對(duì)象的一對(duì)多依賴(lài),這樣一來(lái),當(dāng)一個(gè)對(duì)象改變狀態(tài)時(shí),它的所有依賴(lài)者都會(huì)收到通知并自動(dòng)更新!
設(shè)計(jì)原則
在觀察者模式中,會(huì)改變的是主題的狀態(tài)以及觀察者的數(shù)目。用這個(gè)模式,你可以改變依賴(lài)于主題狀態(tài)的對(duì)象,卻不必改變主題。――找出程序中會(huì)變化的方面,然后將其和固定不變的方面相分離!
主題和觀察者都使用接口:觀察者利用主題的接口向主題注冊(cè),而主題利用觀察者接口通知觀察者。這樣可以讓兩者之間運(yùn)作正常,又同時(shí)具有松耦合的優(yōu)點(diǎn)! ――針對(duì)接口編程,不針對(duì)實(shí)現(xiàn)編程!

觀察者模式利用“組合”將許多觀察者組合進(jìn)主題中。對(duì)象(觀察者――主題)之間的這種關(guān)系不是通過(guò)繼承產(chǎn)生的,而是在運(yùn)行時(shí)利用組合的方式產(chǎn)生的。 ――多用組合,少用繼承!
代碼
復(fù)制代碼 代碼如下:
<?php
/**
* 觀察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主題 */
private $_observers = array();
public function register($sub){ /* 注冊(cè)觀察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部統(tǒng)一訪問(wèn) */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 觀察者要實(shí)現(xiàn)的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback/n";
}
}
//下面是測(cè)試代碼
?
/* 測(cè)試 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();


總結(jié)

當(dāng)新對(duì)象要填入的時(shí)候,只需要在主題(又叫可觀察者)中進(jìn)行注冊(cè)(注冊(cè)方式很多,你也可以在構(gòu)造的時(shí)候,或者框架訪問(wèn)的接口中進(jìn)行注冊(cè)),然后實(shí)現(xiàn)代碼直接在新對(duì)象的接口中進(jìn)行。這降低了主題對(duì)象和觀察者對(duì)象的耦合度。

好的設(shè)計(jì)模式不會(huì)直接進(jìn)入你的代碼中,而是進(jìn)入你的大腦中。

php技術(shù)PHP 設(shè)計(jì)模式之觀察者模式介紹,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 灵石县| 道孚县| 顺义区| 兴文县| 绥棱县| 黄冈市| 海城市| 根河市| 德清县| 安平县| 云阳县| 禹城市| 特克斯县| 全椒县| 宜良县| 济宁市| 临高县| 西宁市| 安溪县| 德安县| 紫金县| 麻城市| 大英县| 米易县| 万宁市| 鸡东县| 乌兰县| 扎兰屯市| 三明市| 康乐县| 于田县| 西充县| 扬中市| 灵台县| 合川市| 巩留县| 天祝| 德清县| 二连浩特市| 鸡泽县| 龙海市|