概念
观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新
实现:
1.定义一个观察者抽象类,抽象类中有一个update接口,负责修改对象的变化
2.然后需要被通知的类 需要继承该类
// 观察者接口
class Observer {
public:
virtual void update(const std::string& message) = 0;
};
// 具体观察者
class ConcreteObserver : public Observer {
public:
ConcreteObserver(const std::string& name) : name(name) {}
void update(const std::string& message) override {
std::cout << name << "收到通知: " << message << std::endl;
}
private:
std::string name;
};
2. 定义被主题类,主题类发生变化时会通知 观察者对象
// 主题(被观察者)接口
class Subject {
public:
virtual void attach(Observer* observer) = 0;
virtual void detach(Observer* observer) = 0;
virtual void notify(const std::string& message) = 0;
};
// 具体主题
class ConcreteSubject : public Subject {
public:
void attach(Observer* observer) override {
observers.push_back(observer);
}
void detach(Observer* observer) override {
// 从观察者列表中移除观察者
for (auto it = observers.begin(); it != observers.end(); ++it) {
if (*it == observer) {
observers.erase(it);
break;
}
}
}
void notify(const std::string& message) override {
// 通知所有观察者
for (Observer* observer : observers) {
observer->update(message);
}
}
private:
std::vector<Observer*> observers;
};
实例:
int main() {
ConcreteSubject subject;
ConcreteObserver observer1("观察者1");
ConcreteObserver observer2("观察者2");
subject.attach(&observer1);
subject.attach(&observer2);
subject.notify("Hello, 观察者们!");
}
本文介绍了观察者模式,一种行为设计模式,描述了如何通过定义观察者接口、具体观察者和主题接口实现一对多的依赖关系,以及在状态变化时通知所有依赖对象的方法。

5377

被折叠的 条评论
为什么被折叠?



