您现在的位置是:网站首页 > 心得笔记
常用设计模式之观察者模式
简介本文将记录常用设计模式之观察者模式
观察者模式定义
观察者模式是一种行为模式,其核心思想是让多个观察者对象同时监听某一主题对象,当主题对象发生变化时,及时通知所有观察者进行 响应的更新操作。
观察者涉及的角色
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() 方法进行相应的更新操作。
上一篇:常用设计模式之工厂
下一篇:常用设计模式之策略模式