🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
当发生一个事件后,可能需要执行多种业务的逻辑操作,这里的每一种逻辑都是一个观察者。 * * * * * **观察者基类** ~~~ abstract class EventGenerator{ private $observers = [];//观察者对象数组 /* * 添加观察者 * */ function addObserver(Observer $observer){ $this->observers[] = $observer; } /* * 通知观察者 * */ function notify(){ foreach ($this->observers as $observer){ $observer->logic(); } } } ~~~ * * * * * **观察者接口** ~~~ interface Observer{ function logic($event_info=''); } ~~~ * * * * * **触发事件,通知观察者的类** ~~~ class Event extends EventGenerator{ function trigger(){ echo 'Event';//触发了一个事件 $this->notify();//通知观察者 } } ~~~ * * * * * **这是一个观察者** ~~~ class ObserverOne implements Observer{ function logic($event_info=''){ echo '逻辑一'; } } ~~~ * * * * * **触发事件** ~~~ $event = new \Event(); $event->addObserver(new \ObserverOne());//添加观察者 $event->trigger();//触发事件 ~~~