php设计模式-观察者模式
2016-06-28 11:25
866 查看
简言之:观察者模式(Observer),当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新。
具体描述:一个对象通过添加一个方法(该方法允许另一个对象-观察者,注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。观察者模式是一种时间系统,意味着这一模式允许某个类观察另一个类的状态。当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作,观察者模式避免组件之间的紧密耦合。
观察者模式中的角色:
Subject(抽象主题角色):主题角色将所有观察者对象的引用保存在一个集合中,每个主题可以有任意多个观察者。抽向主题提供了增加和删除观察者对象的接口。
Observer(抽象观察者角色):为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己。
ConcreteSubject(具体主题角色):存储相关状态到具体观察者对象,当具体主题的内部状态改变时,给所有登记过的观察者发出通知,具体主题角色通常用一个具体子类实现。
ConcreteObserver(具体观察者角色):存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致。
推荐阅读代码:
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
简单代码实现:
\Libs\EventGenerator.php
\Libs\Observer.php
\Libs\ObserverOne.php
\Libs\Event
调用
结果:
添加了-执行了-发生了-One!
推荐阅读:
php模式设计之观察者模式
PHP设计模式之观察者模式
PHP 设计模式之观察者模式
具体描述:一个对象通过添加一个方法(该方法允许另一个对象-观察者,注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。观察者模式是一种时间系统,意味着这一模式允许某个类观察另一个类的状态。当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作,观察者模式避免组件之间的紧密耦合。
观察者模式中的角色:
Subject(抽象主题角色):主题角色将所有观察者对象的引用保存在一个集合中,每个主题可以有任意多个观察者。抽向主题提供了增加和删除观察者对象的接口。
Observer(抽象观察者角色):为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己。
ConcreteSubject(具体主题角色):存储相关状态到具体观察者对象,当具体主题的内部状态改变时,给所有登记过的观察者发出通知,具体主题角色通常用一个具体子类实现。
ConcreteObserver(具体观察者角色):存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致。
推荐阅读代码:
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
简单代码实现:
\Libs\EventGenerator.php
<?php namespace Libs; abstract class EventGenerator { private $observers=array(); public function addObserver(Observer $observer) { echo "添加了-"; $this->observers[] = $observer; } public function notify() { foreach ($this->observers as $observer) { echo "发生了-"; $observer->update(); } } }
\Libs\Observer.php
<?php namespace Libs; interface Observer { public function update($event_info=null); }
\Libs\ObserverOne.php
<?php namespace Libs; class ObserverOne implements Observer { public function update($event_info=null) { echo "One!"; } }
\Libs\Event
<?php namespace Libs; class Event extends \Libs\EventGenerator { public function trigger() { echo "执行了-"; $this->notify(); } }
调用
$event = new \Libs\Event(); $event->addObserver(new \Libs\ObserverOne); $event->trigger();
结果:
添加了-执行了-发生了-One!
推荐阅读:
php模式设计之观察者模式
PHP设计模式之观察者模式
PHP 设计模式之观察者模式
相关文章推荐
- Windows下用IIS搭建ftp服务器不能使用详解
- php 读取表结构自动生成php操作类
- Yii登录验证和全局访问用户ID
- TP框架验证码及文件上传
- 远程服务器的环境的配置
- PHP语言开发Paypal支付demo的具体实现
- PHPunit用法和xml文件
- php中namespace和use的用法
- PHP函数篇之掌握ord()与chr()函数应用
- php 导入excel 方法
- thinkphp not found 不能使用urlrewrite
- 【转】phpcms 手机版本m. 电脑版www. 双模板操作
- vsftpd安装遇到问题
- php fsockopen多线程实现
- php模式-数据映射模式
- PHP环境搭建及工具(dreamweaver)使用
- PHP中9大缓存技术总结
- ContentProvider 开发之简单学习
- ContentProvider 开发之简单学习
- thinkphp 3.2加载类