基本概念
整个观察者模式,其实做的就是监听事件
、处理事件
。
由此引出两个角色,一个是观察者Listener,另一个是事件处理者Handler。
例子
第一步,创建抽象事件类。
它的主要作用是提供两个方法给具体事件类调用。
abstract class EventGenerator
{
// 观察者数组
private $observers = array();
// 添加观察者
function addobserver(Observer $observer)
{
$this->observers[] = $observer;
}
// 事件通知函数
function notify()
{
// 遍历观察者,添加事件处理
foreach($this->observers as $observer)
{
$observer->watch();
}
}
}
第二步,创建具体事件类。
它的主要作用是间接调用事件通知函数。
class Event extends EventGenerator
{
function trigger()
{
echo "Event<br/>";
$this->notify();
}
}
第三步,创建观察者抽象类。
它的作用是给每个观察者一个监听事件的watch方法。
// 观察者接口
interface observer
{
function watch($event_info = null);
}
第四步,创建具体的观察者类。
它的主要作用是,进行收到事件通知的后续处理。
// 多个观察者
class Observer1 implements observer
{
function watch($event_info = null)
{
echo "逻辑1<br/>";
}
}
class Observer2 implements observer
{
function watch($event_info = null)
{
echo "逻辑2<br/>";
}
}
第五步,使用
// 实例化具体事件类
$event = new Event;
// 添加观察者
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
// 间接调用事件通知
$event->trigger();
原文地址
http://larabase.com/collection/5/post/153