观察者模式通过定义一对多依赖关系,使被观察者状态变化时能自动通知所有观察者。在C++中,Subject类维护Observer列表并提供注册、注销和通知方法,Observer接口定义更新操作。示例中TemperatureSensor作为具体被观察者,当温度改变时调用notifyObservers通知所有Display观察者,后者根据新温度更新显示。该模式利用多态和指针管理实现松耦合,适用于GUI事件、消息系统等场景,关键在于明确发布者与订阅者角色,确保接口清晰、数据及时同步。

观察者模式是一种行为设计模式,用于在对象之间定义一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。在C++中实现观察者模式,通常涉及两个核心角色:被观察者(Subject)和观察者(Observer)。
要实现观察者模式,首先需要定义抽象接口:
具体类继承这些接口,并实现相应逻辑。下面是一个简单的C++实现示例。
以下是使用C++实现观察者模式的典型方式:
立即学习“C++免费学习笔记(深入)”;
// Observer 接口
class Observer {
public:
virtual ~Observer() = default;
virtual void update(float temperature) = 0;
};
// Subject 抽象类
class Subject {
private:
std::vector<Observer> observers;
protected:
void notifyObservers(float temperature) {
for (auto obs : observers) {
obs->update(temperature);
}
}
public:
virtual ~Subject() = default;
void attach(Observer o) {
observers.push_back(o);
}
void detach(Observer o) {
observers.erase(std::remove(observers.begin(), observers.end(), o), observers.end());
}
};
// 具体被观察者:温度传感器
class TemperatureSensor : public Subject {
private:
float temperature;
public:
void setTemperature(float temp) {
temperature = temp;
notifyObservers(temperature);
}
};
// 具体观察者:显示设备
class Display : public Observer {
private:
std::string name;
public:
Display(const std::string& n) : name(n) {}
void update(float temperature) override {
std::cout << name << " 显示温度: " << temperature << "°C\n";
}
};
// 使用示例
int main() {
TemperatureSensor sensor;
Display display1("室内屏");
Display display2("室外屏");
sensor.attach(&display1);
sensor.attach(&display2);
sensor.setTemperature(25.5f);
sensor.setTemperature(26.0f);
sensor.detach(&display2);
sensor.setTemperature(27.0f);
return 0;
}
上述实现有几个需要注意的地方:
这种模式适合解耦事件源和响应逻辑,常用于GUI事件处理、消息系统或传感器数据分发等场景。
基本上就这些。只要理清谁是发布者、谁是订阅者,接口定义清晰,C++中的观察者模式并不难实现。
以上就是C++如何实现观察者模式_C++设计模式与观察者模式实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号