您现在的位置是:网站首页 > 心得笔记
常用设计模式之观察者模式
简介本文将记录常用设计模式之观察者模式
观察者模式定义
观察者模式是一种行为模式,其核心思想是让多个观察者对象同时监听某一主题对象,当主题对象发生变化时,及时通知所有观察者进行 响应的更新操作。
观察者涉及的角色
1.Subject(主题):主题也称之为被观察者,它是一个具有状态的对象。当其状态发生变化时,会通知所有注册的观察者对象。主题通常提供 注册、删除和通知观察者的方法。 2.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 = [];
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 someBusinessLogic() {
// 在某些业务逻辑发生改变时,通知所有观察者
$this->notify();
}
}
// 具体观察者类
class ConcreteObserver implements Observer {
public function update(Subject $subject) {
echo "观察者收到了更新通知\n";
}
}
// 使用示例
$subject = new ConcreteSubject();
$observer1 = new ConcreteObserver();
$observer2 = new ConcreteObserver();
$subject->attach($observer1);
$subject->attach($observer2);
$subject->someBusinessLogic(); // 触发更新通知
?>在上面的示例中,ConcreteSubject 类代表了具体的主题,实现了 Subject 接口中的方法;ConcreteObserver 类代表了具体的观察者,实现了 Observer 接口中的方法。当 ConcreteSubject 的状态发生变化时,它会调用 notify() 方法通知所有观察者,观察者收到通知后会执行 update() 方法进行相应的更新操作。
上一篇:常用设计模式之工厂
下一篇:常用设计模式之策略模式