观察者模式
概念 观察者模式属于行为模式,是定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。 当一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式。 观察者模式符合接口隔离原则,实现了对象之间的松散耦合。 角色 抽象主题(subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 具体主题(ConcreteSubjest):将有关状态存入具体观察者对象;在具体主题内部状态改变时,给所有登记过的观察者发出通知。 抽象观察者(Observer):为所有的具体观察者定义一个接口,在得到主题通知时更新自己。 具体观察者(ConcreteObserver):实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题状态协调。 <?php //抽象主题 interface Subject { //新增观察者 public function attach(Observer $observer); //移除观察者 public function detach(Observer $observer); //通知观察者 public function notifyObserver(); } //具体主题 class ConcreteSubjest implements Subject { //储存观察者 private $observers; public function __construct() { $this->observers = []; } //新增观察者 public function attach(Observer $observer) { return array_push($this->observers, $observer); } //移除观察者 public function detach(Observer $observer) { //检查观察者是否存在观察者数组中,返回索引值 $index = array_search($observer, $this->observers); if ($index === false) { return false; } else { unset($this->observers[$index]); return true; } } //通知观察者 public function notifyObserver() { if (!...