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

   2024-09-30 6950
核心提示:观察者模式(Observer Pattern)是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象(被观察对象,也称为主题subjec

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

 
举报打赏
 
更多>同类网点查询
推荐图文
推荐网点查询
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号