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

时间:2025-02-19 10:58:59
#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); // 触发报警 }