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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
PHP与C#分别格式化文件大小的代码
May 14 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
PHP中加密解密函数与DES加密解密实例
Oct 17 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
Mar 31 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利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
javascript 仿QQ滑动菜单效果代码
2010/09/03 Javascript
AngularJS内置指令
2015/02/04 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
JQuery动态添加Select的Option元素实现方法
2016/08/29 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
基于vuejs实现一个todolist项目
2017/04/11 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
layui的table中显示图片方法
2018/08/17 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Python多线程threading创建及使用方法解析
2020/06/17 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
python如何写个俄罗斯方块
2020/11/06 Python
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
小学生自我鉴定
2013/10/12 职场文书
团队精神演讲稿
2013/12/31 职场文书
八年级语文教学反思
2014/02/11 职场文书
经济担保书范文
2014/04/02 职场文书
运动员口号
2014/06/09 职场文书
应届大学生自荐书
2014/06/17 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python