php设计模式 Observer(观察者模式)


Posted in PHP onJune 26, 2011
<?php 
/** 
* 观察者模式 
* 
* 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新 
* 能够便利地创建查看目标对象状态的对象,并且提供与核心对象非耦合的指定功能 
* 插件系统 
*/ 
class Observerable 
{ 
private $_observers = array(); public function registerObserver($observer) 
{ 
$this->_observers[] = $observer; 
} 
public function removeObserver($observer) 
{ 
$key = array_search($observer,$this->_observers); 
if(!($key === false)) 
{ 
unset($this->_observers[$key]); 
} 
} 
public function notifyObservers() 
{ 
foreach($this->_observers as $observer) 
{ 
if($observer instanceof Observer) $observer->update($this); 
} 
} 
} 
interface Observer 
{ 
public function update($observer); 
} 
interface DisplayElement 
{ 
public function display(); 
} 
// -- 实例类定义 
class NewsObserverable extends Observerable 
{ 
private $_sports_news; 
public function setSportsNews($data) 
{ 
$this->_sports_news = $data; 
$this->notifyObservers(); 
} 
public function getSportsNews() 
{ 
return $this->_sports_news; 
} 
private $_local_news; 
public function setLocalNews($data) 
{ 
$this->_local_news = $data; 
$this->notifyObservers(); 
} 
public function getLocalNews() 
{ 
return $this->_local_news; 
} 
} 
class SportsNews implements Observer,DisplayElement 
{ 
private $_data = null; 
public function update($observer) 
{ 
if($this->_data != $observer->getSportsNews()) 
{ 
$this->_data = $observer->getSportsNews(); 
$this->display(); 
} 
} 
public function display() 
{ 
echo $this->_data.date("Y-m-d H:i:s")."<br/>"; 
} 
} 
class LocalNews implements Observer,DisplayElement 
{ 
private $_data = null; 
public function update($observer) 
{ 
if($this->_data != $observer->getLocalNews()) 
{ 
$this->_data = $observer->getLocalNews(); 
$this->display(); 
} 
} 
public function display() 
{ 
echo $this->_data.date("Y-m-d H:i:s")."<br/>"; 
} 
} 
// -- 实例化 --- 
$objObserver = new NewsObserverable(); 
$local = new LocalNews(); 
$sports = new SportsNews(); 
$objObserver->registerObserver($local); 
$objObserver->registerObserver($sports); 
$objObserver->setSportsNews("sports news 1 "); 
$objObserver->setLocalNews("local news 1 "); 
$objObserver->removeObserver($sports); 
$objObserver->setLocalNews("local news 2 "); 
$objObserver->setSportsNews("sports news 2 "); 
$objObserver->removeObserver($local); 
$objObserver->setLocalNews("local news 3 ");
PHP 相关文章推荐
用PHP调用Oracle存储过程的方法
Sep 12 PHP
php数组查找函数总结
Nov 18 PHP
php类自动加载器实现方法
Jul 28 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
PHP使用SOAP调用API操作示例
Dec 25 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
php设计模式 Singleton(单例模式)
Jun 26 #PHP
php设计模式 Command(命令模式)
Jun 26 #PHP
php设计模式 Template (模板模式)
Jun 26 #PHP
php设计模式 Proxy (代理模式)
Jun 26 #PHP
php设计模式 Composite (组合模式)
Jun 26 #PHP
php设计模式 State (状态模式)
Jun 26 #PHP
php设计模式 Bridge (桥接模式)
Jun 26 #PHP
You might like
php结合表单实现一些简单功能的例子
2011/06/04 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
PHP实现的pdo连接数据库并插入数据功能简单示例
2019/03/30 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
javascript 学习之旅 (3)
2009/02/05 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
2013/11/13 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
django 微信网页授权认证api的步骤详解
2019/07/30 Python
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
音乐表演专业毕业生求职信
2013/10/14 职场文书
产品售后服务承诺书
2014/05/21 职场文书
环保志愿者活动总结
2014/06/27 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
流动人口婚育证明范本
2014/09/26 职场文书
皇城相府导游词
2015/02/06 职场文书
结婚幸福感言
2015/08/01 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技