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 相关文章推荐
PHP4 与 MySQL 数据库操作函数详解
Oct 09 PHP
php a simple smtp class
Nov 26 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
php 高效率写法 推荐
Feb 21 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
深入解析php之apc
May 15 PHP
mac下Apache + MySql + PHP搭建网站开发环境
Jun 02 PHP
php获取指定日期之间的各个周和月的起止时间
Nov 24 PHP
PHP生成图片缩略图类示例
Jan 12 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 PHP
在laravel框架中使用model层的方法
Oct 08 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错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
2016/05/05 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
2020/07/26 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
vue实现动态表格提交参数动态生成控件的操作
2020/11/09 Javascript
Python实现感知机(PLA)算法
2017/12/20 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python数据类型之List列表实例详解
2019/05/08 Python
python3的UnicodeDecodeError解决方法
2019/12/20 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
Django如何实现防止XSS攻击
2020/10/13 Python
Python 多进程、多线程效率对比
2020/11/19 Python
经典的班主任推荐信
2013/10/28 职场文书
教师队伍管理制度
2014/01/14 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
反对邪教标语
2014/06/30 职场文书
老干部工作先进事迹
2014/08/17 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
艺术节开幕词
2015/01/28 职场文书
5.12护士节活动总结
2015/02/10 职场文书
入党团支部推荐意见
2015/06/02 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript