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的图形函数中显示汉字
Oct 09 PHP
asp和php下textarea提交大量数据发生丢失的解决方法
Jan 20 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
控制PHP的输出:缓存并压缩动态页面
Jun 11 PHP
php strrpos()与strripos()函数
Aug 31 PHP
Thinkphp中的volist标签用法简介
Jun 18 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
PHP之将POST数据转化为字符串的实现代码
Nov 03 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
Mar 29 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
PHP常见数组排序方法小结
Aug 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 header()函数语法及使用代码
2013/11/04 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
javascript 一些用法小结
2009/09/11 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python在文本开头插入一行的实例
2018/05/02 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python selenium实现发送带附件的邮件代码实例
2019/12/10 Python
python eventlet绿化和patch原理
2020/11/21 Python
工厂仓管员岗位职责
2014/01/01 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
2014年中秋寄语
2014/08/11 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
机关工会工作总结2015
2015/05/26 职场文书
工作年限证明范本
2015/06/15 职场文书
Django 如何实现文件上传下载
2021/04/08 Python