1
PHP观察者模式
Posted by 撒得一地 on 2016年2月24日 in PHP笔记
上一篇: PHP原型模式
下一篇: PHP转义emoji表情,将其存入utf8数据库
下一篇: PHP转义emoji表情,将其存入utf8数据库
观察者模式(Observer),当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新。
场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码。
观察者模式实现了低耦合,非侵入式的通知与更新机制。
观察者模式UML图:
下面先介绍传统的事件更新通知的实现操作。
class Event
{
function trigger()
{
echo "Event update!<br/>";
//具体更新逻辑
echo "update1<br/>";
echo "update2<br/>";
// ...
}
}
$event = new Event;
$event->triger();
这种方法的坏处是当更新通知逻辑越来越多时,trigger方法的代码就会越变越多,越来越复杂,不易维护。而且这种方法,事件和更新机制是耦合在一起的。其实,事件和更新操作本是不一样的业务模块,这种方法属于侵入式的编程方法。
下面介绍低耦合的观察者模式的具体实现方法:
//声明一个抽象的事件发生者基类
abstract class EventGenerator{
private $observers = array();
//添加观察者方法
function addobserver(Observer $observer)
{
$this->observers[] = $observer;
}
//对每个添加的观察者进行事件通知
function notify()
{
//对每个观察者逐个去更新
foreach($this->observers as $observer)
{
$observer->update();
}
}
}
//声明一个观察者接口
interface observer
{
function update($event_info = null);
}
//声明具体事件类,继承了主事件
class Event extends EventGenerator
{
function trigger()
{
echo "Event<br/>";
$this->notify();
}
}
//声明多个观察者
class Observer1 implements observer
{
function update($event_info = null)
{
echo "逻辑1<br/>";
}
}
class Observer2 implements observer
{
function update($event_info = null)
{
echo "逻辑2<br/>";
}
}
//...更多的观察者类
//主逻辑代码
$event = new Event;
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
$event->trigger();
输出结果:
Event 逻辑1 逻辑2
观察者模式的方法使得事件和更新操作很好的进行了分离,使两者实现了低耦合。而且很容易动态的添加和删除某一项观察者逻辑操作。
本文固定地址:http://coderschool.cn/1625.html,转载请注明出处。
上一篇: PHP原型模式
下一篇: PHP转义emoji表情,将其存入utf8数据库
下一篇: PHP转义emoji表情,将其存入utf8数据库
1 Comment
11