PHP设计模式之观察者模式
2014-01-16 00:00
821 查看
首先了解观察者模式的概念:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。观察者模式是一种事件系统,意味着这一模式允许某个类观察另一个类的状态,当被观察的类状态发生改变的时候,观察类可以收到通知并且做出相应的动作;观察者模式为您提供了避免组件之间紧密耦。看下面例子你就明白了!
1.使用观察者模式实现消息推送
2.摘自PHPCHINA的一个不错例子:
1.使用观察者模式实现消息推送
<?php /** *参考IBM官网:http://www.ibm.com/developerworks/cn/opensource/os-php-designptrns/ *@author http://www.phpddt.com */ //观察者 interface IObserver { public function notify(); } //定义可以被观察的对象接口 interface IObservable { public function addObserver($observer); } //实现IObservable接口 class MessageSystem Implements IObservable { private $_observers = array(); public function addObserver($observer) { $this->_observers = $observer; } public function doNotify() { foreach($this->_observers as $o) { $o->notify(); } } } //实现IObserver接口 class User Implements IObserver { public function __construct($username) { echo "我是新用户{$username}<br/>"; } //通知观察者方法 public function notify() { echo '欢迎新用户'; } } //使用 $u = new MessageSystem(); $u->addObserver(new User('小明')); //$u->addObserver(new User('小红')); //$u->addObserver(new User('小黑')); $u->doNotify();
2.摘自PHPCHINA的一个不错例子:
/** * 定义观察接口 */ interface Subject { public function Attach($Observer); //添加观察者 public function Detach($Observer); //踢出观察者 public function Notify(); //满足条件时通知观察者 public function SubjectState($Subject); //观察条件 } /** * 观察类的具体实现 */ class Boss Implements Subject { public $_action; private $_Observer; public function Attach($Observer) { $this->_Observer[] = $Observer; } public function Detach($Observer) { $ObserverKey = array_search($Observer, $this->_Observer); if($ObserverKey !== false) { unset($this->_Observer[$ObserverKey]); } } public function Notify() { foreach($this->_Observer as $value ) { $value->Update(); } } public function SubjectState($Subject) { $this->_action = $Subject; } } /** * 抽象观察者 * */ abstract class Observer { protected $_UserName; protected $_Sub; public function __construct($Name,$Sub) { $this->_UserName = $Name; $this->_Sub = $Sub; } public abstract function Update(); //接收通过方法 } /** * 观察者 */ class StockObserver extends Observer { public function __construct($name,$sub) { parent::__construct($name,$sub); } public function Update() { echo $this->_Sub->_action.$this->_UserName." 你赶快跑..."; } } $huhansan = new Boss(); //被观察者 $gongshil = new StockObserver("三毛",$huhansan); //初始化观察者 $huhansan->Attach($gongshil); //添加一个观察者 $huhansan->Attach($gongshil); //添加一个相同的观察者 $huhansan->Detach($gongshil); //踢出基中一个观察者 $huhansan->SubjectState("警察来了"); //达到满足的条件 $huhansan->Notify(); //通过所有有效的观察者
相关文章推荐
- 学习php设计模式 php实现观察者模式(Observer)
- PHP设计模式之观察者模式
- php设计模式之观察者模式
- 初识PHP设计模式--观察者模式
- php设计模式学习之观察者模式
- PHP 观察者设计模式测试代码笔记
- php设计模式入门-观察者模式
- PHP设计模式 观察者模式(Observer)
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)
- PHP设计模式之观察者模式
- PHP设计模式之JS实现观察者模式
- 学习PHP设计模式之观察者模式
- PHP 设计模式之观察者模式
- PHP 设计模式之观察者模式
- php设计模式-观察者模式
- php中的设计模式之--观察者模式
- php设计模式 四 (观察者 原型模式 迭代器模式)
- PHP设计模式:观察者模式
- PHP 设计模式之观察者模式