观察者模式

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