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中使用sockets:从新闻组中获取文章
Oct 09 PHP
php中几种常见安全设置详解
Apr 06 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
Twig模板引擎用法入门教程
Jan 20 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
微信自定义分享php代码分析
Nov 24 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 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
CPU步进是什么意思?i3-9100F B0步进和U0步进区别知识科普
2020/03/17 数码科技
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
Jquery实现无刷新DropDownList联动实现代码
2010/03/08 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
JS字符串截取函数实例
2013/12/27 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
js获取form的方法
2015/05/06 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Django 内置权限扩展案例详解
2019/03/04 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
百度软件工程师职位
2013/02/14 面试题
研究生自荐信
2013/10/09 职场文书
一年级小学生评语
2014/04/22 职场文书
《称象》教学反思
2014/04/25 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
怎么用Python识别手势数字
2021/06/07 Python
MySQL的安装与配置详细教程
2021/06/26 MySQL
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python