23种设计模式 - 观察者模式
#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); // 触发报警
}