博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SplObserver观察者模式
阅读量:5974 次
发布时间:2019-06-19

本文共 1980 字,大约阅读时间需要 6 分钟。

hot3.png

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

对于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

你可能感兴趣的文章
易宝典文章——如何在Exchange 2010中使用PowerShell文本文件批量移动邮箱
查看>>
智能dns 根据地区解析
查看>>
VS2012配置Git并连接到osc@git
查看>>
索尼高清影视技术学院参观观后感
查看>>
jQuery 文本编辑器插件 HtmlBox 使用
查看>>
生活随笔
查看>>
多台服务器联合工作之samba+wordpress
查看>>
ssh登录服务器慢解决方法
查看>>
Qmake does not support build directories below the source directory
查看>>
linux下mysql5.5.15源码包编译安装
查看>>
linux逻辑卷的建立
查看>>
Red Hat Enterprise Linux7防火墙配置详细说明
查看>>
tomcat下web应用的基本结构,各文件夹里面存放什么?
查看>>
第三节 信息系统应用发布
查看>>
vmware安装CentOS后,克隆后网卡不能启动的解决方法
查看>>
nginx配置文件详解与配置文件优化(三)
查看>>
监控软件zabbix使用snmp协议
查看>>
linux用户登陆的读取配置文件过程
查看>>
登录页面实现客户端验证、客户端验证是如何实现的?
查看>>
centos 6.x 与centos5.x 系统服务的差别
查看>>