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 相关文章推荐
来自phpguru得Php Cache类源码
Apr 15 PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
PHP中把stdClass Object转array的几个方法
May 08 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
php查询ip所在地的方法
Dec 05 PHP
PHP实现的带超时功能get_headers函数
Feb 10 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
php 变量引用与变量销毁机制详细介绍
Dec 05 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
PHP的静态方法与普通方法用法实例分析
Sep 26 PHP
PHP 裁剪图片
Mar 09 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详细彻底学习Smarty
2008/03/27 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
php addslashes 函数详细分析说明
2009/06/23 PHP
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
python使用opencv读取图片的实例
2017/08/17 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
python Celery定时任务的示例
2018/03/13 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
公司年会晚宴演讲稿
2014/01/06 职场文书
商场中秋节活动方案
2014/02/07 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
2015年推普周活动方案
2015/05/06 职场文书
如何在Python中创建二叉树
2021/03/30 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python