观察者模式当一个对象的状态发生变化时,所有依赖它的对象都会得到通知并自动更新。例如:一个事件发生后,需要进行一系列的更新操作。传统的方式是更新后写一些业务处理逻辑。代码难维护,耦合,新逻辑需要改变主结构Observer模式实现耦合,非侵入式通知和更新机制//传统方法classEvent{publicfunctiontrigger(){echo"event";//一般事件发生后,直接在后面写逻辑}}$e=newEvent();//=================================//Observer//事件正在发生abstractclassEventGenerator{private$observers=[];//保存所有观察者publicfunctionaddObserver(Observer$observer)//添加观察者{$this->observers[]=$observer;}publicfunctionnotify()//通知,事件发生后,通知观察者执行{foreach($this->observersas$observer){//逐一调用每个观察者的update方法$observer->update();}}}//观察者类接口Observer{publicfunctionupdate($event_info);//事件发生后,需要执行的操作}classEventextendsEventGenerator{publicfunctiontrigger(){//事件发生后,调用notify通知所有观察者触发$this->notify();}}$e=newEvent();$e->addObserver(newOB1());$e->addObserver(newOB2());$event->trigger();classOB1implementsObserver{publicfunctionupdate(){echo"ob1";}}
