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脚本数据库功能详解(下)
Oct 09 PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
Sep 15 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
如何让搜索引擎抓取AJAX内容解决方案
Aug 25 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
Dec 23 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
php自动载入类用法实例分析
Jun 24 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采集利器 Snoopy 试用心得
2011/07/03 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python绘制随机网络图形示例
2019/11/21 Python
Python实现SMTP邮件发送
2020/06/16 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
Weblogic的布署方式
2013/08/23 面试题
Java工程师面试集锦之Spring框架
2013/06/16 面试题
若干个Java基础面试题
2015/05/19 面试题
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
法律六进活动方案
2014/03/13 职场文书
培训后的感想
2015/08/07 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书