观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象(被观察对象,也称为主题subject)的状态发生变化时,所有依赖于它的对象(观察者observer)都会得到通知并自动更新
以下是使用C++实现观察者模式的示例代码:
#include#include // 观察者接口 class Observer { public: virtual void update() = 0; }; // 具体观察者 class ConcreteObserver : public Observer { public: void update() override { std::cout << "Observer received a notification!"<< std::endl; } }; // 被观察对象(主题)接口 class Subject { public: virtual void registerObserver(Observer* observer) = 0; virtual void removeObserver(Observer* observer) = 0; virtual void notifyObservers() = 0; }; // 具体主题 class ConcreteSubject : public Subject { private: std::list
observers; public: void registerObserver(Observer* observer) override { observers.push_back(observer); } void removeObserver(Observer* observer) override { observers.remove(observer); } void notifyObservers() override { for (Observer* observer : observers) { observer->update(); } } void changeState() { std::cout << "Subject state changed!"<< std::endl; notifyObservers(); } }; int main() { // 创建具体主题和观察者对象 ConcreteSubject subject; ConcreteObserver observer1, observer2; // 注册观察者 subject.registerObserver(&observer1); subject.registerObserver(&observer2); // 改变主题状态,触发通知 subject.changeState(); return 0; }
在这个示例中,我们首先定义了Observer
接口和ConcreteObserver
具体实现类。然后,我们定义了Subject
接口和ConcreteSubject
具体实现类。ConcreteSubject
类维护了一个观察者列表,并提供了注册、移除观察者和通知观察者的方法。
在main()
函数中,我们创建了一个ConcreteSubject
对象和两个ConcreteObserver
对象。然后,我们将这两个观察者注册到主题中。当我们调用changeState()
方法改变主题状态时,它会自动通知所有已注册的观察者。运行此程序,你将看到每次主题状态发生变化时,观察者都会收到通知。