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函数
Dec 06 PHP
isset和empty的区别
Jan 15 PHP
php 过滤危险html代码
Jun 29 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
yii2中添加验证码的实现方法
Jan 09 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
PHP数组常用函数实例小结
Aug 20 PHP
Laravel 读取 config 下的数据方法
Oct 13 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
apache rewrite_module模块使用教程
2008/01/10 PHP
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
php表单提交问题的解决方法
2011/04/12 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
JavaScript 学习笔记(十五)
2010/01/28 Javascript
javascript中的prototype属性实例分析说明
2010/08/09 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
Python import自定义模块方法
2015/02/12 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
Python IDLE清空窗口的实例
2018/06/25 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
什么是网络协议
2016/04/07 面试题
彩色的非洲教学反思
2014/02/18 职场文书
关爱留守儿童标语
2014/06/18 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS
SQL Server Agent 服务无法启动
2022/04/20 SQL Server
vue 给数组添加新对象并赋值
2022/04/20 Vue.js