如何用C++实现观察者模式

avatar
作者
猴君
阅读量:0

观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象(被观察对象,也称为主题subject)的状态发生变化时,所有依赖于它的对象(观察者observer)都会得到通知并自动更新

以下是使用C++实现观察者模式的示例代码:

#include<iostream> #include <list>  // 观察者接口 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<Observer*> 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()方法改变主题状态时,它会自动通知所有已注册的观察者。运行此程序,你将看到每次主题状态发生变化时,观察者都会收到通知。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!