c++ 观察者模式代码
时间: 2023-10-18 08:20:02 浏览: 39
以下是一个简单的 C++ 观察者模式实现的代码示例:
```
#include <iostream>
#include <vector>
using namespace std;
class Observer {
public:
virtual void update() = 0;
};
class Subject {
private:
vector<Observer*> observers;
public:
void attach(Observer* observer) {
observers.push_back(observer);
}
void detach(Observer* observer) {
observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());
}
void notify() {
for (Observer* observer : observers) {
observer->update();
}
}
};
class ConcreteObserver1 : public Observer {
public:
void update() {
cout << "ConcreteObserver1 received the update." << endl;
}
};
class ConcreteObserver2 : public Observer {
public:
void update() {
cout << "ConcreteObserver2 received the update." << endl;
}
};
class ConcreteSubject : public Subject {
public:
void doSomething() {
cout << "ConcreteSubject is doing something." << endl;
notify();
}
};
int main() {
ConcreteSubject subject;
ConcreteObserver1 observer1;
ConcreteObserver2 observer2;
subject.attach(&observer1);
subject.attach(&observer2);
subject.doSomething();
subject.detach(&observer2);
subject.doSomething();
return 0;
}
```
在这个实现中,我们定义了一个 Observer 接口和一个 Subject 类。具体的观察者 ConcreteObserver1 和 ConcreteObserver2 实现了 Observer 接口,而具体的被观察者 ConcreteSubject 继承了 Subject 类。
ConcreteSubject 类中有一个 doSomething() 方法,它会触发 notify() 方法,通知所有注册过的观察者。被观察者可以通过 attach() 方法注册观察者,detach() 方法注销观察者。
在 main() 函数中,我们创建了 ConcreteSubject 和两个 ConcreteObserver 的实例,注册了这两个观察者,然后调用 doSomething() 方法触发通知。我们还演示了如何注销一个观察者,然后再次触发通知。
这个简单的实现可以帮助你理解观察者模式的基本原理和实现方式。