课程名称:大话PHP设计模式
课程章节: 9-1观察者模式
课程链接
主讲老师:Rango
课程内容
老师给出了观察者模式的定义,然后通过代码演示让我们更加深入了解到观察者模式的实现原理。
课程收获
定义
观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
理解
一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理逻辑。当更新得逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码。
应用
观察者模式通常用在实时事件处理系统、组件间解耦、数据库驱动的消息队列系统,同时也是MVC设计模式中的重要组成部分
场景举例
比如用户注册后需要增加一个邮件推送的功能,过几天加送优惠券的功能,这时将代码都写在登录里就非常的耦合的,或者比如要根据用户不同的角色给出不同的处理方式(势利眼的观察者看人下菜),这些都可以使用观察者模式
优势
观察者模式实现了低耦合,非侵入式的通知与更新机制
代码实现
interface Observer
{
function update();
}
abstract class EventGenerator
{
private $observers = [];
function addObserver(Observer $observer)
{
$this->observers[] = $observer;
}
function notify()
{
foreach ($this->observers as $observer ) {
$observer->update();
}
}
}
class Event extends EventGenerator
{
function trigger()
{
echo "Event<br>\n";
$this->notify();
}
}
class Observer1 implements Observer
{
function update($ebent_info = null)
{
echo "逻辑1<br />\n";
}
}
class Observer2 implements Observer
{
function update($ebent_info = null)
{
echo "逻辑2<br />\n";
}
}
$event = new Event;
$event->addObserver(new Observer1);
$event->addObserver(new Observer2);
$event->trigger();