Content

PHP设计模式之观察者模式浅析(观察者模式应用实例)没想到

文章摘要

这篇文章简要介绍了 observer 模式及其在 PHP 中的实现。文章通过定义 `Subject` 和 `Observer` 接口,以及 `ConcreteSubject` 和 `ConcreteObserver` 类,展示了如何实现主题和观察者的绑定关系。具体实现包括: 1. `Subject` 接口定义了 `attach`、`detach` 和 `notify` 方法,用于绑定和通知观察者。 2. `Observer` 接口定义了 `update` 方法,用于接收主题的状态更新。 3. `ConcreteSubject` 类实现了 `Subject` 接口,通过维护观察者列表管理状态更新。 4. `ConcreteObserver` 类实现了 `Observer` 接口,通过读取和写入主题状态实现反馈。 5. 文章通过示例代码展示了如何通过实例化主题和观察者,绑定观察者,更新主题状态,并通过观察者获取最新状态。 文章重点在于通过具体的代码实现,演示了 observer 模式的典型用法及其在分布式系统中的应用价值。

<?php // 主题接口 interface Subject { public function attach(Observer $observer); public function detach(Observer $observer); public function notify(); } // 观察者接口 interface Observer { public function update(Subject $subject); } // 具体主题类 class ConcreteSubject implements Subject { private $observers=[]; private $state; public function attach(Observer $observer) { $this->observers[]=$observer; } public function detach(Observer $observer) { $index=array_search($observer, $this->observers); if ($index !==false) { unset($this->observers[$index]); } } public function notify() { foreach ($this->observers as $observer) { $observer->update($this); } } public function getState() { return $this->state; } public function setState($state) { $this->state=$state; $this->notify(); } } // 具体观察者类 class ConcreteObserver implements Observer { private $state; public function update(Subject $subject) { $this->state=$subject->getState(); } public function getState() { return $this->state; } } // 使用观察者模式 $subject=new ConcreteSubject(); $observer1=new ConcreteObserver(); $observer2=new ConcreteObserver(); $subject->attach($observer1); $subject->attach($observer2); $subject->setState(“State 1”); echo $observer1->getState(); // 输出:State 1 echo $observer2->getState(); // 输出:State 1 $subject->setState(“State 2”); echo $observer1->getState(); // 输出:State 2 echo $observer2->getState(); // 输出:State 2 $subject->detach($observer2); $subject->setState(“State 3”); echo $observer1->getState(); // 输出:State 3 echo $observer2->getState(); // 输出:State 2