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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
php获得当前的脚本网址
Dec 10 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
php中++i 与 i++ 的区别
Aug 08 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
一个简单的PHP验证码实现代码
May 10 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
老生常谈PHP面向对象之注册表模式
May 26 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 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中单双引号的区别详解
2016/06/12 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
关于vue面试题汇总
2018/03/20 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
react用Redux中央仓库实现一个todolist
2019/09/29 Javascript
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
python使用knn实现特征向量分类
2018/12/26 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
UGG英国官方网站:UGG UK
2018/02/08 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
教师应聘个人求职信
2013/12/10 职场文书
人事部主管岗位职责
2013/12/26 职场文书
挂职思想汇报
2013/12/31 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL
Java实现聊天机器人完善版
2021/07/04 Java/Android
DQL数据查询语句使用示例
2022/12/24 MySQL