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投票程序源码
Mar 11 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHP连接SQLServer2005 的问题解决方法
Jul 19 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
yii上传文件或图片实例
Apr 01 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
php生成html文件方法总结
2014/12/01 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP整合PayPal支付
2015/06/11 PHP
PHP实现的策略模式示例
2019/03/20 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
详解Vue之计算属性
2020/06/20 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
澳大利亚设计的婴儿和女孩的衣服:Oobi
2018/12/16 全球购物
英国户外装备商店:Ultimate Outdoors
2019/05/07 全球购物
Linux常见面试题
2013/03/18 面试题
英文版银行求职信
2013/10/09 职场文书
卫生安全检查制度
2014/02/04 职场文书
公立医院改革实施方案
2014/03/14 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
律政俏佳人观后感
2015/06/09 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
Go 中的空白标识符下划线
2022/03/25 Golang
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL