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者的疑难问答(1)
Oct 09 PHP
php 调用远程url的六种方法小结
Nov 02 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
Zend Framework实现自定义过滤器的方法
Dec 09 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 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
对javascript和select部件的结合运用
2006/10/09 PHP
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
微信支付开发维权通知实例
2016/07/12 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
js表单验证实例讲解
2016/03/31 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
Python学习笔记之Zip和Enumerate用法实例分析
2019/08/14 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
python 基于opencv去除图片阴影
2021/01/26 Python
给导游的表扬信
2014/01/10 职场文书
小学生家长寄语
2014/04/02 职场文书
团日活动总结范文
2014/04/25 职场文书
解除同居协议书
2015/01/29 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android