标签:
观察者模式
1.观察者模式,当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新
2.场景:一个事件发生后,要执行一连串更新操作,在传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新的
逻辑增多之后,代码变得难以维护,这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件主体的代码
3.观察者模式就可以实现,低耦合,非侵入式的通知与更新机制
class Event extends \Jkz\EventGenerator//创建事件
{
function triger()
{
echo "Event!<br/>\n";
//update 传统的直接在事件之后添加代码,直到变得越来越多难以维护
// echo "逻辑1<br/>\n"; //逻辑1 逻辑2等都是独立的模块,不能在这里侵入式的修改逻辑主题
// echo "逻辑2!<br/>\n";
// echo "逻辑3!<br/>\n";
// echo "逻辑4!<br/>\n";
//观察者模式下的事件发生之后只需要调用 事件发生者基类的notify通知所有观察者更新
$this->notify();
}
}
//增加一个观察者,必须实现观察者的接口
class Observer1 implements \Jkz\IObserver
{
function update($event_info = null)
{
echo "逻辑1<br/>\n"; //逻辑1 逻辑2等都是独立的模块,不能在这里侵入式的修改逻辑主题
}
}
class Observer2 implements \Jkz\IObserver
{
function update($event_info = null)
{
echo "逻辑2<br/>\n"; //逻辑1 逻辑2等都是独立的模块,不能在这里侵入式的修改逻辑主题
}
}
//将这个观察者加入到监听列表中
$event = new Event();
$event->addObserver(new Observer1());
$event->addObserver(new Observer2());
//事件发生之后自动通知每一个观察者
$event->triger();
实例
使用观察者模式完成数据库增加数据后的一系列更新操作
Model基类
UserModel
观察者配置
观察者
标签:
原文地址:http://www.cnblogs.com/jk0011/p/5534319.html