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