當發生一個事件后,可能需要執行多種業務的邏輯操作,這里的每一種邏輯都是一個觀察者。
* * * * *
**觀察者基類**
~~~
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();//觸發事件
~~~