当发生一个事件后,可能需要执行多种业务的逻辑操作,这里的每一种逻辑都是一个观察者。
观察者基类
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();//触发事件