- 当一个对象状态产生扭转时,依赖他的对象全副会受到告诉,并自动更新
- 例如:一个事件产生后,要执行一连串的更新操作,传统的为在更新后,写一些业务解决逻辑,代码难以保护,耦合的,新增逻辑须要扭转主体构造
- 观察者模式实现了耦合,非侵入式的告诉和更新机制
// 传统形式
class Event {public function trigger(){
echo "event";
// 个别是事件产生后,在前面间接写逻辑
}
}
$e = new Event();
//===============================
// 观察者
// 事件产生着
abstract class EventGenerator {private $observers = []; // 保留所有观察者
public function addObserver(Observer $observer) // 减少观察者
{$this->observers[] = $observer;
}
public function notify() // 告诉,事件产生后,告诉观察者执行
{foreach ($this->observers as $observer){
// 一一调用每个观察者的 update 办法
$observer->update();}
}
}
// 观察者类
interface Observer{public function update($event_info); // 事件产生后,须要进行的操作
}
class Event extends EventGenerator {public function trigger(){
// 产生事件后,调用 notify,告诉所有观察者触发就能够
$this->notify();}
}
$e = new Event();
$e->addObserver(new OB1());
$e->addObserver(new OB2());
$event->trigger();
class OB1 implements Observer {public function update (){echo "ob1";}
}