Php-SPL库中的观察者模式接口详解
来源:互联网 发布:as3是一门编程语言吗 编辑:程序博客网 时间:2024/05/22 07:44
PHP-SPL标准库中实现了观察者模式接口,PHP内置提供了两个接口来供外部应用区实现这个模式。
<文档>http://www.php.net/manual/zh/splobserver.update.php
SplSubject 接口
SplSubject代表着被观察的对象,其结构:
interface SplSubject{//添加(注册)一个观察者public function attach(SplObserver $observer);//删除一个观察者public function detach(SplObserver $observer);//当状态发生改变时,通知所有观察者 public function notify();}
SplObserver 接口
SplObserver 代表着充当观察者的对象,其结构:
interface SplObserver{ //在目标发生改变时接收目标发送的通知;当关注的目标调用其notify()时被调用 public function update(SplSubject $subject);}
<说明>
SplSubject维护了一个特定的状态,在其状态改变时调用 notify()方法,一旦这个方法被调用,任何先前通过 attach()方法注册上来的 SplObserver对象都会以调用其 update()方法的方式被更新。
编程OOP
class MyObserver1 implements SplObserver{ public function update(SplSubject $subject) { echo "MyObserver1 updated\n"; }}class MyObserver2 implements SplObserver{ public function update(SplSubject $subject) { echo "MyObserver2 updated\n"; }}class MySubject implements SplSubject{ private $_observers; private $_name; public function __construct($name) { $this->_observers = new SplObjectStorage(); $this->_name = $name; } public function attach(SplObserver $observer) { $this->_observers->attach($observer); } public function detach(SplObserver $observer) { $this->_observers->detach($observer); } public function notify() { foreach ($this->_observers as $observer) { $observer->update($this); } } public function getName() { return $this->_name; }}
测试用例Test Case:
<代码>
class testDriver{ public function run() { $observer1 = new MyObserver1(); $observer2 = new MyObserver2(); $subject = new MySubject("test"); $subject->attach($observer1); $subject->attach($observer2); $subject->notify(); }}$test = new testDriver();$test->run();
<输出>
- Php-SPL库中的观察者模式接口详解
- Php-SPL库中的迭代器接口详解
- Php SPL库中的迭代器接口详解
- 使用php标准库spl在实现观察者模式
- Php-SPL库中的迭代器类详解
- Php-SPL库中的迭代器类详解
- Php SPL库 的迭代器类详解
- PHP SPL详解
- PHP SPL详解
- php spl使用详解
- PHP语言中的SPL
- php中的spl
- Java中的观察者模式详解
- 利用 SPL 快速实现 观察者设计模式
- php系统内置的 观察者模式接口
- php中的设计模式之--观察者模式
- php标准库(SPL)-SPL函数
- PHP SPL 标准库
- 关于Matlab写复杂函数的思考
- 问题;关于软件绑马的谁知道。。求解
- c++ 数字的进制转化输出/出入
- ubuntu 如何安装glib2.0
- java常用类库-正则表达式【2】
- Php-SPL库中的观察者模式接口详解
- js动态生成表格时 colspan的问题
- The Lion King's Complete Lines
- UIViewController的生命周期及iOS程序执行顺序
- 第十三周任务二纯虚函数与继承
- Cocos2d-x 动作系统浅析
- 简易记事本,只有保存,打开,退出3个功能!
- ExtJs的事件机制Event(学员总结)
- getchar输入EOF以及\n问题