观察者模式是一种行为设计模式,其中一个对象(主题)维护其依赖对象(观察者)的列表,当主题的状态发生变化时,它通知所有观察者。以下是一个使用C++11实现观察者模式的简单例子:
下面是对上述步骤的更详细的讲解:
// Observer.h#pragma onceclass Observer {public: virtual void update(int data) = 0;};
// ConcreteObserverA.h#pragma once#include <iostream>#include "Observer.h"class ConcreteObserverA : public Observer {public: void update(int data) override { std::cout << "Observer A 收到更新,数据为: " << data << std::endl; }};
// ConcreteObserverB.h#pragma once#include <iostream>#include "Observer.h"class ConcreteObserverB : public Observer {public: void update(int data) override { std::cout << "Observer B 收到更新,数据为: " << data << std::endl; }};
// Subject.h#pragma once#include "Observer.h"class Subject {public: virtual void addObserver(Observer* observer) = 0; virtual void removeObserver(Observer* observer) = 0; virtual void notifyObservers(int data) = 0;};
// ConcreteSubject.h#pragma once#include <vector>#include "Subject.h"class ConcreteSubject : public Subject {private: std::vector<Observer*> observers; int data;public: void addObserver(Observer* observer) override { observers.push_back(observer); } void removeObserver(Observer* observer) override { observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end()); } void notifyObservers(int data) override { for (Observer* observer : observers) { observer->update(data); } } void setData(int newData) { data = newData; notifyObservers(data); } int getData() const { return data; }};
// main.cpp#include "ConcreteObserverA.h"#include "ConcreteObserverB.h"#include "ConcreteSubject.h"int main() { ConcreteSubject subject; ConcreteObserverA observerA; ConcreteObserverB observerB; subject.addObserver(&observerA); subject.addObserver(&observerB); subject.setData(123); subject.removeObserver(&observerA); subject.setData(456); return 0;}
在这个例子中,我们创建了抽象观察者类 Observer,具体观察者类 ConcreteObserverA 和 ConcreteObserverB。然后,我们定义了抽象主题类 Subject 和具体主题类 ConcreteSubject。最后,在客户端代码中,我们创建了具体的主题和观察者对象,将观察者添加到主题中,并演示了状态变化时如何通知观察者,以及如何移除观察者。
本文链接:http://www.28at.com/showinfo-26-81867-0.html用C++11打造智能观察者模式:详解实现步骤完整示例代码
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com