观察者模式以前一直不懂,现在有时间从网上搞了一发,自己写了一遍
<?php /** * 继承PhP的spl接口实现被观察的对象 * Class MyObject */ class MyObject implements SplSubject { //定义观察者的集合 public $observers; //定义被观察的属性 public $name; /** * 用Spl的objectStorage进行操作 * MyObject constructor. */ public function __construct($name) { $this->observers = new SplObjectStorage(); $this->name = $name; } /** * 增加观察者 * @param SplObserver $observer 观察者对象 */ public function attach(SplObserver $observer) { $this->observers->attach($observer); } /** * 减少观察者 * @param SplObserver $observer 观察者对象 */ public function detach(SplObserver $observer) { $this->observers->detach($observer); } /** * 进行更改通知,通知观察者的对象发生改变 */ public function notify() { // TODO: Implement notify() method. foreach ($this->observers as $observer) { $observer->update($this); } } /** * 获取名称 */ public function getName() { return $this->name; } } /** * 观察者的类别,继承splObserver * Class MyObserver */ class MyObserver implements SplObserver { public function update(SplSubject $subject) { echo $subject->getName().PHP_EOL; } } $observer1 = new MyObserver(); $observer2 = new MyObserver(); $subject = new MyObject('哈哈哈哈'); $subject->attach($observer1); $subject->attach($observer2); $subject->notify();