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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
PHP的FTP学习(一)
Oct 09 PHP
PHP的FTP学习(二)
Oct 09 PHP
php动态生成JavaScript代码
Mar 09 PHP
php 删除记录实现代码
Mar 12 PHP
PHP 身份证号验证函数
May 07 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 PHP
PHP错误和异常处理功能模块示例
Nov 12 PHP
PHP中localeconv()函数的用法
Mar 26 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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 zend解密软件绿色版测试可用
2008/04/14 PHP
PHP Mysql编程之高级技巧
2008/08/27 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
Using the TextRange Object
2006/10/14 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
JSON对象 详解及实例代码
2016/10/18 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
javascript实现随机抽奖功能
2020/12/30 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
Windows下使Python2.x版本的解释器与3.x共存的方法
2015/10/25 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
在pycharm 中添加运行参数的操作方法
2019/01/19 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python内存管理机制原理详解
2019/08/12 Python
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
编程输出如下图形
2013/11/24 面试题
教师的实习鉴定
2013/12/15 职场文书
项目经理任命书
2014/06/04 职场文书
高三励志标语
2014/06/05 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
领导班子整改措施
2014/10/24 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python