观察者模式
- 当一个对象状态产生扭转时,依赖他的对象全副会受到告诉,并自动更新
- 例如:一个事件产生后,要执行一连串的更新操作,传统的为在更新后,写一些业务解决逻辑,代码难以保护,耦合的,新增逻辑须要扭转主体构造
- 观察者模式实现了耦合,非侵入式的告诉和更新机制
// 传统形式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"; }}