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 str_pad 函数使用详解
Jan 13 PHP
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
pdo中使用参数化查询sql
Aug 11 PHP
浅谈php中mysql与mysqli的区别分析
Jun 10 PHP
关于PHP语言构造器介绍
Jul 08 PHP
destoon各类调用汇总
Jun 20 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
php将服务端的文件读出来显示在web页面实例
Oct 31 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 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实现mysql数据库备份类
2008/03/20 PHP
php checkbox 取值详细说明
2010/08/19 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
使用tensorflow实现AlexNet
2017/11/20 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
OpenCV 模板匹配
2019/07/10 Python
python如何对链表操作
2020/10/10 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
Nobody Denim官网:购买高级女士牛仔裤
2021/03/15 全球购物
校园安全教育广播稿
2014/02/17 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
学校对教师的评语
2014/04/28 职场文书
红头文件任命书范本
2014/06/05 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
安全教育片观后感
2015/06/17 职场文书