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 print EOF实现方法
May 21 PHP
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
十大使用PHP框架的理由
Sep 26 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
php mysql like 实现多关键词搜索的方法
Oct 29 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 PHP
PHP 时间处理类Carbon
May 20 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
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
Javascript实现的分页函数
2007/02/07 Javascript
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
Python中的defaultdict模块和namedtuple模块的简单入门指南
2015/04/01 Python
python实现发送邮件功能
2017/07/22 Python
python Flask实现restful api service
2017/12/04 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
python爬虫要用到的库总结
2020/07/28 Python
Python排序函数的使用方法详解
2020/12/11 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
Ruby如何进行文件操作
2014/07/17 面试题
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
普宁寺导游词
2015/02/04 职场文书
城南旧事电影观后感
2015/06/16 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS