PHP的观察者设计模式实现相对简单,可是PHP5+版本号中已经有标准库类库支持,我们仅仅需简单继承并实现就能够了。

观察者:实现标准接口类库SplSubject。

一个注冊方法:attach。一个取消注冊方法:detach。一个通知方法:nofity。

<?php

class TSPLSubject implements SplSubject{

	 private $observers, $value;

	 public function __construct(){
$this->observers =array();
} public function attach(SplObserver $observer){
$this->observers[] = $observer;
} public function detach(SplObserver $observer){
if($idx = array_search($observer, $this->observers,true)) {
unset($this->observers[$idx]);
}
} /**
*
* Notify observers one by one (main entry)
*
* @param none
* @return none
*/
public function notify(){
foreach($this->observers as $observer){
$observer->update($this);
}
} public function setValue($value){
$this->value = $value;
//$this->notify();
} public function getValue(){
return $this->value;
}
}

被观察者:实现标准接口类库SplObserver。一个update方法。

<?php

class TSPLObserver implements SplObserver{
public function update(SplSubject $subject){
echo 'The new state of subject ' , nl2br("\r\n");
// echo 'The new state of subject '.$subject->getValue();
}
}
<?

php

class TSPLObserver1 implements SplObserver{
public function update(SplSubject $subject){
echo 'The new state of subject one ' , nl2br("\r\n");
// echo 'The new state of subject '.$subject->getValue();
}
}

測试调用(同文件夹下):

<?

php

function __autoload($classname) {
require_once ($classname . ".php");
} $subject = new TSPLSubject();
$subject->attach(new TSPLObserver());
$observer1 = new TSPLObserver1();
$subject->attach($observer1);
//$subject->attach(new TSPLObserver2());
//$subject->detach($observer1); $subject->notify(); exit();

输出:

>php basic.php

The new state of subject <br />

The new state of subject one <br />

最新文章

  1. mysql常用方法学习
  2. jquery.form插件
  3. ViewController之间的切换动画
  4. linux服务端的网络编程
  5. win环境下mysql5.6.14的所有变量的默认值
  6. HTML3层叠样式表
  7. exp-00091 oracle错误的解决办法
  8. iOS坐标转换失败?UIKit的屠神坑
  9. 【JavaScript中的this详解】
  10. Splay的初步学习
  11. SQL-索引-012
  12. Excel 函数集(使用过的)
  13. PTA 7-8 哈利&#183;波特的考试(floyd)
  14. Android开发环境的发展演变调研
  15. 东芝线阵CCD芯片TCD1305DG驱动时序设计
  16. Byedance AI Camp-笔试题目
  17. Java从零开始学六(运算符)
  18. linux grep命令(linux在文件中搜索内容)
  19. openresty package.path require 报错
  20. IOS 触摸事件的处理

热门文章

  1. centos语言设置
  2. day03_12/13/2016_bean的管理之依赖注入
  3. 【原】cocos2d-x开发笔记:获取Sprite上某一个点的透明度,制作不规则按钮
  4. mailto的使用
  5. js常用操作~~~~将持续更新
  6. UI开发模式对比:JSP、Android、Flex
  7. WinServer2008配置任务计划
  8. c#仿照qq登录界面编辑框内容操作
  9. =new、=null、.clear()、system.gc()的区别
  10. JDK升级