1. PHP面向对象编程中的观察者模式简介
观察者模式是一种常见的设计模式,它用于对象之间的一对多依赖关系。在PHP面向对象编程中,观察者模式是一种灵活且强大的工具,可用于解耦和简化代码结构。
观察者模式由两个主要组件组成:主题和观察者。主题是被观察的对象,观察者是依赖于主题,并在主题状态发生改变时得到通知的对象。
1.1 观察者模式的作用
观察者模式的作用在于使主题和观察者之间的耦合度降低,使得代码更加灵活和可扩展。
1.2 观察者模式的示例
下面我们通过一个简单的示例来说明观察者模式的使用。
假设我们有一个天气主题,它可以向订阅了它的观察者发送天气更新通知。
// 主题接口
interface Subject {
public function attach(Observer $observer);
public function detach(Observer $observer);
public function notify();
}
// 主题类
class WeatherSubject implements Subject {
private $observers = [];
private $temperature;
public function attach(Observer $observer) {
$this->observers[] = $observer;
}
public function detach(Observer $observer) {
$key = array_search($observer, $this->observers);
if ($key !== false) {
unset($this->observers[$key]);
}
}
public function notify() {
foreach ($this->observers as $observer) {
$observer->update($this->temperature);
}
}
public function setTemperature($temperature) {
$this->temperature = $temperature;
$this->notify();
}
}
// 观察者接口
interface Observer {
public function update($temperature);
}
// 观察者类
class WeatherObserver implements Observer {
private $temperature;
public function update($temperature) {
$this->temperature = $temperature;
$this->display();
}
public function display() {
echo "当前温度: " . $this->temperature . "℃";
}
}
// 使用示例
$weatherSubject = new WeatherSubject();
$weatherObserver1 = new WeatherObserver();
$weatherSubject->attach($weatherObserver1);
$weatherObserver2 = new WeatherObserver();
$weatherSubject->attach($weatherObserver2);
$weatherSubject->setTemperature(25); // 输出:当前温度: 25℃
在上面的示例中,WeatherSubject 是主题类,WeatherObserver 是观察者类。WeatherSubject 实现 Subject 接口,通过 attach、detach 和 notify 方法来管理观察者的注册和通知。WeatherObserver 实现 Observer 接口,通过 update 方法来处理主题状态的变化。