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 魔术方法使用说明
Oct 20 PHP
PHP include_path设置技巧分享
Jul 03 PHP
PHP写日志的实现方法
Nov 05 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
PHP中的一些常用函数收集
May 26 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
PHP实现限制IP访问及提交次数的方法详解
Jul 17 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
Thinkphp5+uploadify实现的文件上传功能示例
May 26 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 PHP
基于php+MySql实现学生信息管理系统实例
Aug 04 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积分兑换接口实例
2015/02/09 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
Python的ORM框架SQLObject入门实例
2014/04/28 Python
python字典get()方法用法分析
2015/04/17 Python
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
2020/05/03 Python
Python通过文本和图片生成词云图
2020/05/21 Python
美国购车网站:TrueCar
2016/10/19 全球购物
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
护理专科毕业推荐信
2013/11/10 职场文书
车间主管岗位职责
2013/11/14 职场文书
管理专员自荐信
2014/01/26 职场文书
庆中秋节主题活动方案
2014/02/03 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
Python 多线程之threading 模块的使用
2021/04/14 Python
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android