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生成静态页面详解
Dec 05 PHP
php xfocus防注入资料
Apr 27 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
关于php中一些字符串总结
May 05 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
php函数mkdir实现递归创建层级目录
Oct 27 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 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新手上路(十一)
2006/10/09 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
three.js 入门案例详解
2018/01/23 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
python编写简单爬虫资料汇总
2016/03/22 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
最新pycharm安装教程
2020/11/18 Python
python基于socket模拟实现ssh远程执行命令
2020/12/05 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
企业办公室岗位职责
2014/03/12 职场文书
买房委托公证书
2014/04/08 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
庆六一宣传标语
2014/10/08 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
css3应用示例:新增的选择器
2022/03/16 HTML / CSS