php中的观察者模式


Posted in PHP onMarch 24, 2010

观察者模式

interface Subject 
{ 
public function Attach($Observer); //添加观察者 
public function Detach($Observer); //踢出观察者 
public function Notify(); //满足条件时通知观察者 
public function SubjectState($Subject); //观察条件 
} 
class Boss Implements Subject 
{ 
public $_action; 
private $_Observer; 
public function Attach($Observer) 
{ 
$this->_Observer[] = $Observer; 
} 
public function Detach($Observer) 
{ 
$ObserverKey = array_search($Observer, $this->_Observer); 
if($ObserverKey !== false) 
{ 
unset($this->_Observer[$ObserverKey]); 
} 
} 
public function Notify() 
{ 
foreach($this->_Observer as $value ) 
{ 
$value->Update(); 
} 
} 
public function SubjectState($Subject) 
{ 
$this->_action = $Subject; 
} 
} 
abstract class Observer 
{ 
protected $_UserName; 
protected $_Sub; 
public function __construct($Name,$Sub) 
{ 
$this->_UserName = $Name; 
$this->_Sub = $Sub; 
} 
public abstract function Update(); //接收通过方法 
} 
class StockObserver extends Observer 
{ 
public function __construct($name,$sub) 
{ 
parent::__construct($name,$sub); 
} 
public function Update() 
{ 
echo $this->_Sub->_action.$this->_UserName." 你赶快跑..."; 
} 
} 
$huhansan = new Boss(); //被观察者 
$gongshil = new StockObserver("三毛",$huhansan); //初始化观察者 
$huhansan->Attach($gongshil); //添加一个观察者 
$huhansan->Attach($gongshil); //添加一个相同的观察者 
$huhansan->Detach($gongshil); //踢出基中一个观察者 
$huhansan->SubjectState("警察来了"); //达到满足的条件 
$huhansan->Notify(); //通过所有有效的观察者

可以粗略的理解为,一个类(我们称之为被观察者),这个类继承了一个被观察者容器的借口
该接口中的方法有:添加观察者,踢出观察者,提醒观察者,和观察条件
添加观察者即相当于把一些类注册到这个容器之中,当然这些类的前提是需要有一个相应被观察者反应信息的方法,
被观察者容器通过接受不同的观察条件参数来判断是否需要提醒所有本容器中的已经注册过的观察者是否相应
一旦满足提醒条件,提醒容器内所有观察者让其调用相应方法并且实现对应观察者实例的变化
暂且理解到此!
PHP 相关文章推荐
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
php获取301跳转URL简单实例
Dec 16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
PHP检测用户语言的方法
Jun 15 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
详解php实现页面静态化原理
Jun 21 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 PHP
PHP 获取远程文件内容的函数代码
Mar 24 #PHP
PHP中基本符号及使用方法
Mar 23 #PHP
PHP技术开发技巧分享
Mar 23 #PHP
PHP初学者常见问题集合 修正版(21问答)
Mar 23 #PHP
PHP5 字符串处理函数大全
Mar 23 #PHP
Smarty Foreach 使用说明
Mar 23 #PHP
用php或asp创建网页桌面快捷方式的代码
Mar 23 #PHP
You might like
php单例模式示例分享
2015/02/12 PHP
PHP中overload与override的区别
2017/02/13 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
jquery 插件学习(二)
2012/08/06 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
nodejs开发微博实例
2015/03/25 NodeJs
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
Django 生成登陆验证码代码分享
2017/12/12 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
实例介绍Python中整型
2019/02/11 Python
python标记语句块使用方法总结
2019/08/05 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
iostream与iostream.h的区别
2015/01/16 面试题
ORACLE十问
2015/04/20 面试题
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
委托书格式要求
2015/01/28 职场文书
2015年统战工作总结
2015/05/19 职场文书
湘江北去观后感
2015/06/15 职场文书
爱国电影观后感
2015/06/19 职场文书
少先队入队仪式主持词
2015/07/04 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
2019新员工心得体会
2019/06/25 职场文书
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android