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 相关文章推荐
Zend公司全球首推PHP认证
Oct 09 PHP
用php写的serv-u的web申请账号的程序
Oct 09 PHP
Base64在线编码解码实现代码 演示与下载
Jan 08 PHP
php常用文件操作函数汇总
Nov 22 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
Dec 18 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
Jun 22 PHP
详解PHP用mb_string处理windows中文字符
May 26 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 无限级数据JSON格式及JS解析
2010/07/17 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
JQuery 入门实例1
2009/06/25 Javascript
js 弹出菜单/窗口效果
2011/10/30 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
js获取浏览器的各种属性
2017/04/27 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
详解nodeJS之路径PATH模块
2017/05/31 NodeJs
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
使用python3+xlrd解析Excel的实例
2018/05/04 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
pycharm工具连接mysql数据库失败问题
2020/04/01 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
远东集团网络工程师面试题
2014/10/20 面试题
毕业生个人投资创业计划书
2014/01/04 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
品质标语大全
2014/06/21 职场文书
工作收入住址证明
2014/10/28 职场文书
感恩节寄语2015
2015/03/24 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
vue2实现provide inject传递响应式
2021/05/21 Vue.js