php中的观察者模式简单实例


Posted in PHP onJanuary 20, 2015

观察者模式是设计模式中比较常见的一个模式,包含两个或者更多的互相交互的类。这一模式允许某个类观察另外一个类的状态,当被观察类的状态发生变化时候,观察者会进行得到通知进而更新相应状态。

php的SPL标准类库提供了SplSubject和SplObserver接口来实现,被观察的类叫subject,负责观察的类叫observer。这一模式是SplSubject类维护了一个特定状态,

当这个状态发生变化时候,它就会调用notify方法。调用notify方法时,所有之前使用attach方法注册的SplObserver实例的update方法都会调用,Demo如下:

class DemoSubject implements SplSubject{

    private $observers, $value;

 

    public function __construct(){

        $this->observers = array();

    }

 

    public function attach(SplObserver $observer){

        $this->observers[] = $observer;

    }

 

    public function detach(SplObserver $observer){

        if($idx = array_search($observer, $this->observers, true)){

            unset($this->observers[$idx]);

        }

    }

 

    public function notify(){

        foreach($this->observers as $observer){

            $observer->update($this);

        }

    }

 

    public function setValue($value){

        $this->value = $value;

        $this->notify();

    }

 

    public function getValue(){

        return $this->value;

    }

}

 

class DemoObserver implements SplObserver{

    public function update(SplSubject $subject){

        echo 'The new value is '. $subject->getValue();

    }

}

 

$subject = new DemoSubject();

$observer = new DemoObserver();

$subject->attach($observer);

$subject->setValue(5);
PHP 相关文章推荐
php访问查询mysql数据的三种方法
Oct 09 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
PHP面向对象之旅:深入理解static变量与方法
Jan 06 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
实例简介PHP的一些高级面向对象编程的特性
Nov 27 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 #PHP
PHP函数extension_loaded()用法实例
Jan 19 #PHP
php使用正则表达式获取图片url的方法
Jan 16 #PHP
php使用CURL伪造IP和来源实例详解
Jan 15 #PHP
php+mysql实现无限分类实例详解
Jan 15 #PHP
php截取html字符串及自动补全html标签的方法
Jan 15 #PHP
php在linux下检测mysql同步状态的方法
Jan 15 #PHP
You might like
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
php按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
动态加载js、css等文件跨iframe实现
2014/02/24 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
微信小程序购物商城系统开发系列-工具篇的介绍
2016/11/21 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
python重试装饰器示例
2014/02/11 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python数组定义方法
2016/04/13 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
python3安装crypto出错及解决方法
2019/07/30 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Python装饰器实现方法及应用场景详解
2020/03/26 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
本科生导师推荐信范文
2014/05/18 职场文书
领导班子四风问题对照检查材料
2014/09/27 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
大学生求职意向书
2015/05/11 职场文书
追讨欠款律师函
2015/05/27 职场文书
2015年暑期见闻
2015/07/14 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
60句有关成长的名言
2019/09/04 职场文书