观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象(A对象)事件发生时通知多个 ‘观察者’,即观察A对象的其他对象。
代码示例
注:PHP 中包含几个内置接口 (SplSubject、 SplObserver), 它们能让你的观察器模式实现与其他 PHP 代码兼容。
<?php class subject implements SplSubject { public $state; //存储订阅者,通知时候遍历使用 private $observers; public function __construct() { $this->observers = new SplObjectStorage(); } //添加订阅对象 public function attach(SplObserver $observer) { // TODO: Implement attach() method. $this->observers->attach($observer); } //删除订阅对象 public function detach(SplObserver $observer) { // TODO: Implement detach() method. $this->observers->detach($observer); } //遍历通知订阅者 public function notify() { // TODO: Implement notify() method. foreach ($this->observers as $observer){ $observer->update($this); } } //业务逻辑,业务变更时通知关联业务作出对应变更 public function someBusinessLogic() { //模仿业务变更 $this->state = mt_rand(0,10); //通知订阅者 $this->notify(); } } //订阅者A class concreateObserverA implements SplObserver { public function update(SplSubject $subject) { // TODO: Implement update() method. echo 'A 关联业务变更'; } } //订阅者B class concreateObserverB implements SplObserver { public function update(SplSubject $subject) { // TODO: Implement update() method. echo 'B 关联业务变更'; } } //客户端 $subject = new subject(); $conA = new concreateObserverA(); //添加订阅者A $subject->attach($conA); $conB = new concreateObserverB(); //添加订阅者B $subject->attach($conB); //业务逻辑变更后,通知订阅者使订阅者逻辑变更 $subject->someBusinessLogic();