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 相关文章推荐
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php 面向对象的一个例子
Apr 12 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
Web程序工作原理详解
Dec 25 PHP
php压缩和解压缩字符串的方法
Mar 14 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 PHP
php断点续传之文件分割合并详解
Dec 13 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 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
一个用php3编写的简单计数器
2006/10/09 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
php use和include区别总结
2019/10/13 PHP
在 PHP 和 Laravel 中使用 Traits的方法
2019/11/13 PHP
javascript 闭包
2011/09/15 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
Python闭包和装饰器用法实例详解
2019/05/22 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python获取栅格点和面值的实现
2020/03/10 Python
python-地图可视化组件folium的操作
2020/12/14 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
业务主管岗位职责范本
2013/12/25 职场文书
关于环保的建议书400字
2014/03/12 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
工作目标责任书
2014/07/23 职场文书
写给医院的感谢信
2015/01/22 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
党课主持词大全
2015/06/30 职场文书
毕业生求职自荐信(2016最新版)
2016/01/28 职场文书