主页 > 游戏开发  > 

23种设计模式-观察者模式

23种设计模式-观察者模式
模式定义

观察者模式(Observer Pattern)是一种行为型设计模式,定义了一对多的依赖关系:当一个对象(称为主题)状态变化时,所有依赖它的对象(称为观察者)会自动收到通知并更新。这种模式广泛用于事件驱动系统,如数控系统中的状态监控。


模式结构

抽象主题(Subject)

维护观察者列表,提供添加、删除和通知观察者的接口。 具体主题(ConcreteSubject)实现抽象主题接口,存储具体状态(如数控机床的温度、加工状态),并在状态变化时触发通知。 抽象观察者(Observer)定义更新接口(如 Update()),供具体观察者实现。 具体观察者(ConcreteObserver)实现更新逻辑,响应主题状态变化(如更新监控界面或记录日志)。
适用场景

状态变化触发多组件更新:如数控机床温度超限时通知冷却系统和报警器。 解耦事件源与处理逻辑:避免数控系统各模块直接耦合。 动态订阅机制:允许运行时增减监控模块(如临时添加日志记录器)。


C++示例(数控系统场景)

场景说明: 数控机床运行时,温度传感器检测到温度变化时,需通知监控界面和报警系统。

#include #include #include // 抽象观察者 class Observer { public: virtual ~Observer() = default; virtual void update(float temperature) = 0; // 温度变化时触发 }; // 抽象主题:数控机床传感器 class TemperatureSensor { public: virtual ~TemperatureSensor() = default; virtual void attach(std::shared_ptr observer) = 0; virtual void notify() = 0; }; // 具体主题:温度传感器实现 class ConcreteSensor : public TemperatureSensor { private: std::vector> observers_; float temperature_ = 25.0f; // 初始温度 public: void setTemperature(float temp) { temperature_ = temp; notify(); // 温度变化时通知观察者 } void attach(std::shared_ptr observer) override { observers_.push_back(observer); } void notify() override { for (auto& observer : observers_) { observer->update(temperature_); } } }; // 具体观察者1:监控界面 class MonitorUI : public Observer { public: void update(float temperature) override { std::cout << "监控界面更新:当前温度 " << temperature << "°C\n"; } }; // 具体观察者2:高温报警器 class AlarmSystem : public Observer { public: void update(float temperature) override { if (temperature > 80.0f) { std::cout << "警告:温度超过安全阈值!\n"; } } }; // 客户端 int main() { auto sensor = std::make_shared(); auto monitor = std::make_shared(); auto alarm = std::make_shared(); // 注册观察者 sensor->attach(monitor); sensor->attach(alarm); // 模拟温度变化 sensor->setTemperature(45.0f); // 监控界面更新 sensor->setTemperature(85.0f); // 触发报警 }

代码解释 主题与观察者解耦:ConcreteSensor 仅负责通知,不关心观察者的具体逻辑。 动态扩展性:新增观察者(如日志记录器)无需修改主题代码。 数控系统应用:温度变化时,监控界面和报警系统自动响应,符合实时监控需求。

标签:

23种设计模式-观察者模式由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“23种设计模式-观察者模式