2019独角兽企业重金招聘Python工程师标准>>>

其实观察者模式这是一种较为容易去理解的一种模式吧,它是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作。比如键盘,我一敲击,系统就收到通知并进行相应的回应。

对于PHP来说,PHP内置提供了两个接口来供外部应用区实现这个模式。
SplSubject 接口,它代表着被观察的对象,其结构:
interface SplSubject{public function attach(SplObserver $observer);public function detach(SplObserver $observer);public function notify();
}
SplObserver 接口,它代表着充当观察者的对象,其结构:
interface SplObserver{public function update(SplSubject $subject);
}
这一个模式是这样实现的。SplSubject维护了一个特定的状态,当这个状态发生变化时,它就用notify()来通知之前用attach注册到SplSubject的所有SplObserver,并且调用其相应的update方法。
简单的例子:
class subject 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 observer implements SplObserver{public function update(SplSubject $subject){echo ‘The new state of subject’.$subject->getValue(); }    }$subject = new subject();$observer = new observer();$subject->attach($observer);$subject->setValue(5);//observer会自动调用update方法,从而输出The new state of subject 5

转载于:https://my.oschina.net/assange/blog/414343

SplObserver观察者模式相关推荐

  1. 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)

    设计模式 ( 十五 ) 观察者模式Observer(对象行为型) 1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来 ...

  2. 观察者设计模式 php,PHP设计模式 - 观察者模式

    [一]模式定义 观察者模式有时也被称作发布/订阅模式,该模式用于为对象实现发布/订阅功能:一旦主体对象状态发生改变,与之关联的观察者对象会收到通知,并进行相应操作. 将一个系统分割成一个一些类相互协作 ...

  3. 设计模式(三)--观察者模式

    观察者模式:定义了对象间的一种一对多的依赖关系,当被观察的对象发生改变时,所有依赖于它的对象都会得到通知并被自动更新,而且被观察的对象和观察者之间是松耦合的.在该模式中,有目标(Subject)和观察 ...

  4. PHP 高级编程(3/5) - 使用SPL(标准PHP库)实现观察者模式

    SPL(标准PHP库 - Standard PHP Library)是PHP5面向对象功能中重要的部分.原文解释是这样的"The Standard PHP Library (SPL) is ...

  5. 设计模式 ( 十七 ):Observer 观察者模式 -- 行为型

    1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是 ...

  6. php 查看spl,PHP使用标准库spl实现的观察者模式示例

    本文实例讲述了PHP使用标准库spl实现的观察者模式.分享给大家供大家参考,具体如下: 前面使用纯php实现了一个观察者模式(php观察者模式), 现在使用php标准库spl在次实现观察者模式,好处是 ...

  7. Laravel核心解读--观察者模式

    观察者模式 Laravel的Event事件系统提供了一个简单的观察者模式实现,能够订阅和监听应用中发生的各种事件,在PHP的标准库(SPL)里甚至提供了三个接口SplSubject, SplObser ...

  8. php yii2 观察者模式,观察者模式(Observer)

    观察者模式(Observer) 3.7.1. 目的 当对象的状态发生变化时,所有依赖于它的对象都得到通知并被自动更新.它使用的是低耦合的方式. 3.7.2. 例子 使用观察者模式观察消息队列在 GUI ...

  9. PHP实现常用设计模式之观察者模式

    观察者模式定义对象的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新! 设计原则 在观察者模式中,会改变的是目标对象的状态以及观察者的数目.用这个模式,你可以改变依赖于 ...

最新文章

  1. MindSpore Lite整体架构介绍
  2. Twitter Storm常见模式
  3. Cisco路由器配置命令之模式转换命令
  4. vs2013 编译 notepad++ 源代码 2014-7-23
  5. 回忆四班的那些事儿~
  6. IAM页,IAM链表,分配单元
  7. 计算时间:一个运算符重载示例
  8. android 监听媒体库,一个蛋疼的功能,监听android系统媒体库的变动
  9. php ci的session和php session,php及codeigniter使用session-cookie的方法(详解)
  10. C语言-超市仓库管理系统的设计与实现
  11. 万元怎样保留小数点_excel中数值转换成万元后如何只保留两位小数?,excle 万元 元...
  12. 苹果电脑网速怎么测试软件,macbookpro怎么检测网速?
  13. java实训报告心得体会,看这一篇就够了!
  14. 熊绎:我看软件工程师的职业规划
  15. uniapp启动微信小程序报错---initialize
  16. c语言姓名如何定义,c语言如何输入编号和姓名
  17. Basketball Dribbling
  18. python基础-廖雪峰
  19. SQL中in和not in
  20. 14个坏习惯可能让你丢掉工作

热门文章

  1. 小程序自定义数字键盘|仿微信支付、支付宝支付密码键盘
  2. 使用 CSS3 实现 3D 图片滑块效果
  3. zuul源码分析之Request生命周期管理
  4. C语言 · 9-1九宫格
  5. Android第四十二期 - 关于微信手势退出Activity的操作
  6. corosync+pacemaker来实现http服务的高可用性
  7. 强大的jQuery选择器之选定连续多行
  8. OSI七层网络结构图与TCP/IP五层网络结构图
  9. OC 实现的几个排序算法
  10. js判断手指的上滑,下滑,左滑,右滑,事件监听