设计模 监听者 是什么作用 举例 C++
时间: 2023-08-16 14:04:25 浏览: 170
设计模式-观察者模式 基于MFC实现的消息监听机制
5星 · 资源好评率100%
设计模式中的“观察者”(Observer)模式,也叫“监听者”(Listener)模式,它是一种行为型模式,其作用是定义对象间一种一对多的依赖关系,使得每当一个对象状态改变时,其相应的依赖对象都会收到通知并自动更新。这种模式主要用于实现事件监听和回调机制。
在 C++ 中,可以使用回调函数或函数指针来实现观察者模式。下面是一个简单的示例:
```c++
#include <iostream>
#include <vector>
// 定义观察者接口
class Observer {
public:
virtual void update() = 0;
};
// 定义具体观察者类
class ConcreteObserver : public Observer {
public:
void update() {
std::cout << "ConcreteObserver: received update notification." << std::endl;
}
};
// 定义被观察者类
class Subject {
public:
void attach(Observer* observer) {
m_observers.push_back(observer);
}
void detach(Observer* observer) {
for (auto it = m_observers.begin(); it != m_observers.end(); ++it) {
if (*it == observer) {
m_observers.erase(it);
break;
}
}
}
void notify() {
for (auto observer : m_observers) {
observer->update();
}
}
private:
std::vector<Observer*> m_observers;
};
int main() {
Subject subject;
ConcreteObserver observer1, observer2;
subject.attach(&observer1);
subject.attach(&observer2);
subject.notify();
subject.detach(&observer2);
subject.notify();
return 0;
}
```
在上面的示例中,`Observer` 是观察者接口,定义了一个 `update()` 方法,用于接收更新通知。`ConcreteObserver` 是具体观察者类,实现了 `update()` 方法。`Subject` 是被观察者类,其中包含了一个观察者列表,可以使用 `attach()` 方法添加观察者,使用 `detach()` 方法移除观察者,使用 `notify()` 方法通知所有观察者。在 `main()` 函数中,我们创建了一个 `Subject` 对象和两个 `ConcreteObserver` 对象,将这两个观察者添加到被观察者对象的观察者列表中,并调用 `notify()` 方法通知所有观察者。然后我们移除了一个观察者,并再次调用 `notify()` 方法。运行程序,输出结果如下:
```
ConcreteObserver: received update notification.
ConcreteObserver: received update notification.
ConcreteObserver: received update notification.
```
阅读全文