观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时会通知所有观察者的对象,使它们能够自动更新自己。
//主题类 abstract class ObjectEvent { private $_observers = array(); public function register($sub){ $this->_observers[] = $sub; } public function notify(){ if(!empty($this->_observers)){ foreach ($this->_observers as $observer){ $observer->update(); } } } }
class Event extends ObjectEvent { public function trigger(){ $this->notify(); } }
#观察者要实现的接口 interface Observerable { public function update(); }
class Subscriber implements Observerable { public function update() { echo '输出结果'; } }
$event = new Event(); $event->register(new Subscriber()); $event->notify(); 观察者模式的关键对象是主题和观察者,一个主题可以有任意数目的依赖它的观察者,一旦主题的状态发生了改变,所有的观察者都可以得到通知。主题发出通知时并不需要知道谁是它的观察者。也就是说,具体观察者是谁,它根本不需要知道。而任何 一个具体观察者不知道也不需要知道其他观察者的存在。 什么时候使用观察者模式呢?当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式