PHP 观察者模式

来源:互联网 发布:手机消息提醒软件 编辑:程序博客网 时间:2024/06/04 18:50
<?php /** * 观察者模式 * * 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新 * 能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能 * 插件系统 */ class Observerable {private $_observers=array();public function registerObserver($observer) {$this->_observers[]=$observer;}public function removeObserver($observer) {$key=array_search($observer,$this->_observers);if(!($key===false)){unset($this->_observers[$key]);}}public function notifyObserver() {foreach($this->_observers as $key=>$observer){if($observer instanceof Observer){//$args = func_get_args();//call_user_func_array(array($observer,'update'),$this);$observer->update($this);}}}}interface Observer {public function update($observer);}class SubjectObserverable extends Observerable {private $_subject;private $_content;public function setSubject($subject) {$this->_subject=$subject;$this->notifyObserver();}public function getSubject() {return $this->_subject;}}class KevinObserver implements Observer {private $_data=null;public function update($observer) {$this->_data=$observer->getSubject();$this->show();}public function show() {echo 'hello Kevin:'.'<br/>';var_export($this->_data);echo '<br/>';}}class MarkObserver implements Observer {private $_data=null;public function update($observer) {$this->_data=$observer->getSubject();$this->show();}public function show() {echo 'hello Mark:'.'<br/>';var_export($this->_data);echo '<br/>';}}$oObserverable=new SubjectObserverable();$oKevin=new KevinObserver();$oMark=new MarkObserver();$oObserverable->registerObserver($oKevin);$oObserverable->registerObserver($oMark);$oObserverable->setSubject("this is the first subject");$oObserverable->setSubject("this is the second subject");$oObserverable->removeObserver($oMark);$oObserverable->setSubject("this is the third subject");$oObserverable->removeObserver($oKevin);$oObserverable->setSubject("this is the fourth subject");

原创粉丝点击