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 相关文章推荐
ASP知识讲座四
Oct 09 PHP
如何分别全角和半角以避免乱码
Oct 09 PHP
用PHP来写记数器(详细介绍)
Oct 09 PHP
开发大型 PHP 项目的方法
Jan 02 PHP
PHP中改变图片的尺寸大小的代码
Jul 17 PHP
php跨域cookie共享使用方法
Feb 20 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php接口实现拖拽排序功能
Apr 23 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 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 CLI模式下的多进程应用分析
2013/06/03 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
PHP开发注意事项总结
2015/02/04 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
什么是JavaScript
2009/08/13 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
类似天猫商品详情随浏览器移动的示例代码
2014/02/27 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
以JavaScript来实现WordPress中的二级导航菜单的方法
2015/12/14 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
[01:00:26]Ti4主赛事胜者组第一天 EG vs NEWBEE 1
2014/07/19 DOTA
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python使用列表的最佳方案
2020/08/12 Python
Python爬虫教程知识点总结
2020/10/19 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
商务会议邀请函
2014/01/09 职场文书
护士自荐信怎么写
2015/03/06 职场文书
2015年市场部工作总结
2015/04/30 职场文书
董事长助理工作总结2015
2015/07/23 职场文书