观察者模式
- 当一个对象状态发生改变时,依赖他的对象全部会受到通知,并自动更新
- 例如:一个事件发生后,要执行一连串的更新操作,传统的为在更新后,写一些业务处理逻辑,代码难以维护,耦合的,新增逻辑需要改变主体结构
- 观察者模式实现了耦合,非侵入式的通知和更新机制
// 传统方式
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";
}
}