程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php設計模式之觀察者模式

php設計模式之觀察者模式

編輯:關於PHP編程

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();

 

 

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


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved