1. 概念
当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。观察者模式实现了低耦合,非侵入式的通知与更新机制。
2. 应用场景
当一个事件发生后,要执行一系列的更新操作。在传统的编程方式中,就是在事件的代码之后直接加入处理的逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。
EventGenerator.php
<?php
abstract class EventGenerator {
private $observers = [];
public function addObserver(Observer $observer)
{
$this->observers[] = $observer;
}
public function notify()
{
foreach ($this->observers as $observer) {
$observer->update();
}
}
}
Observer.php
<?php
/**
* 定义一个观察者接口
**/
interface Observer {
// 这里就是在事件发生后要执行的逻辑
public function update();
}
<?php
/**
* 一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件
**/
class Event extends EventGenerator {
public function triger() {
echo "Event<br>";
}
}
class Observer1 implements Observer {
public function update() {
echo "update逻辑1<br>";
}
}
class Observer2 implements Observer {
public function update() {
echo "update逻辑2<br>";
}
}
$event = new Event();
$event->addObserver(new Observer1());
$event->addObserver(new Observer2());
$event->triger();
$event->notify();