设计模式PHP5实现之----观察者(Observer)

王朝php·作者佚名  2006-01-09
宽屏版  字体: |||超大  

<?php

/**

* 观察者模式

*

* 观察者模式定义了一个一对多的依赖关系

* 让一个或多个观察者对象监察一个主题对象

* 这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象

* 使这些观察者对象能够自动更新。

*

* @author doodoo<pwtitle@gmail.com>

*/

/**

* 一个抽象的主题接口即被观察者

*/

interface Subject{

public function attach(Observer $observer);

public function detach(Observer $observer);

public function notifyObservers();

}

/**

* 具体的被观察者

* 实际接口

*/

class MySubject implements Subject {

private $observers = array();

public function attach(Observer $observer){

$this->observers[] = $observer;

}

public function detach(Observer $observer){

$key = array_search($observer,$this->observers);

if(false!=$key){

unset($this->observers[$key]);

}

}

public function notifyObservers(){

foreach ($this->observers as $observer) {

if($observer instanceof Observer){

$observer->update();

}

}

}

/**

* 取得观察者总数

*/

public function getCountObservers(){

return sizeof($this->observers);

}

}

/**

* 观察者的接口

*/

interface Observer{

public function update();

}

/**

* 具体观察者,用来获得主题的通知

*/

class MyObserver implements Observer {

private $id = null;

public function __construct(){

$this->id = uniqid();

}

public function update(){

echo "收到通知!";

echo $this->id;

echo "<BR>\r\n";

}

}

$observer1 = new MyObserver(1);

$observer2 = new MyObserver(2);

$observer3 = new MyObserver(3);

$subject = new MySubject();

$subject->attach($observer1);

$subject->attach($observer2);

$subject->attach($observer3);

echo "观察者总数:".$subject->getCountObservers()."<BR>\r\n";

$subject->notifyObservers();

echo "\r\n";

?>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有