C++设计模式观察者模式
时间: 2023-10-11 19:11:01 浏览: 61
观察者模式(Observer Pattern)是一种行为型设计模式,它允许一个对象(称为主题或可观察者)在状态变化时通知其他多个对象(称为观察者)。这个模式主要用于解耦主题和观察者,使它们能够独立地进行修改和扩展。
在观察者模式中,主题维护一个观察者列表,可以动态地添加或移除观察者。当主题的状态发生变化时,它会遍历观察者列表,并调用每个观察者的更新方法,将状态变化的信息传递给观察者。观察者可以根据接收到的信息做出相应的操作。
以下是一个简单的示例代码,演示了观察者模式的实现:
```c
#include <iostream>
#include <vector>
// 观察者接口
class Observer {
public:
virtual void update(int data) = 0;
};
// 具体观察者 A
class ConcreteObserverA : public Observer {
public:
void update(int data) override {
std::cout << "ConcreteObserverA received: " << data << std::endl;
}
};
// 具体观察者 B
class ConcreteObserverB : public Observer {
public:
void update(int data) override {
std::cout << "ConcreteObserverB received: " << data << std::endl;
}
};
// 主题
class Subject {
private:
int data;
std::vector<Observer*> observers;
public:
void attach(Observer* observer) {
observers.push_back(observer);
}
void detach(Observer* observer) {
// 从观察者列表中删除观察者
// ...
}
void notify() {
for (Observer* observer : observers) {
observer->update(data);
}
}
void setData(int value) {
data = value;
notify();
}
};
int main() {
Subject subject;
ConcreteObserverA observerA;
ConcreteObserverB observerB;
subject.attach(&observerA);
subject.attach(&observerB);
subject.setData(42);
return 0;
}
```
在上述示例中,`Subject` 是主题类,维护了一个观察者列表。`Observer` 是观察者接口,定义了一个 `update` 方法用于接收主题的通知。`ConcreteObserverA` 和 `ConcreteObserverB` 是具体的观察者类,实现了 `update` 方法。
在 `main` 函数中,我们创建了一个主题对象 `subject` 和两个观察者对象 `observerA` 和 `observerB`。通过调用 `attach` 方法,将观察者对象添加到主题的观察者列表中。然后,通过调用 `setData` 方法改变主题的状态,并自动通知所有观察者。
当 `subject.setData(42)` 被调用时,观察者 `observerA` 和 `observerB` 的 `update` 方法会被依次调用,输出相应的信息。
这就是观察者模式的基本实现。通过使用观察者模式,主题和观察者之间的耦合性降低,可以方便地扩展和修改代码。