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 Static关键字实用方法
Jun 04 PHP
php函数之子字符串替换 str_replace
Mar 23 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
PHP简单选择排序算法实例
Jan 26 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
Mar 16 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
PHP中addslashes与mysql_escape_string的区别分析
Apr 25 PHP
简单的pgsql pdo php操作类实现代码
Aug 25 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
php 截取中英文混合字符串的方法
May 31 PHP
PHP7 其他语言层面的修改
Mar 09 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将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
PHP自定义多进制的方法
2016/11/03 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
php实现微信发红包功能
2018/07/13 PHP
JavaScript 快捷键设置实现代码
2009/03/13 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
2015/09/05 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
JS中的模糊查询功能
2019/12/08 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
python 实时遍历日志文件
2016/04/12 Python
Python基于time模块求程序运行时间的方法
2017/09/18 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
建筑总经理岗位职责
2014/02/02 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
晋江市人民政府党组群众路线教育实践活动整改方案
2014/10/25 职场文书
应聘教师自荐信
2015/03/26 职场文书
超市收银员岗位职责
2015/04/07 职场文书
公司周年庆典致辞
2015/07/30 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
无线电知识基础入门篇
2022/02/18 无线电
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL