Attach(in:Observer)类图在cpp程序里怎么写
时间: 2024-03-03 10:52:11 浏览: 23
在C++程序中,实现观察者模式的关键是要定义Subject和Observer两个类。可以先定义它们的抽象类,然后再定义具体的类实现它们。
下面是一个简单的示例程序,演示了如何实现Attach(in:Observer)方法:
```cpp
#include <iostream>
#include <vector>
// 抽象观察者
class Observer {
public:
virtual void update() = 0;
};
// 具体观察者1
class ConcreteObserver1 : public Observer {
public:
void update() override {
std::cout << "ConcreteObserver1 received the notification" << std::endl;
}
};
// 具体观察者2
class ConcreteObserver2 : public Observer {
public:
void update() override {
std::cout << "ConcreteObserver2 received the notification" << std::endl;
}
};
// 抽象被观察者
class Subject {
public:
virtual void attach(Observer* observer) = 0;
virtual void notify() = 0;
};
// 具体被观察者
class ConcreteSubject : public Subject {
private:
std::vector<Observer*> observers_;
public:
void attach(Observer* observer) override {
observers_.push_back(observer);
}
void notify() override {
for (auto observer : observers_) {
observer->update();
}
}
};
int main() {
Subject* subject = new ConcreteSubject();
Observer* observer1 = new ConcreteObserver1();
Observer* observer2 = new ConcreteObserver2();
subject->attach(observer1);
subject->attach(observer2);
subject->notify();
return 0;
}
```
在这个程序中,抽象观察者和抽象被观察者分别被定义为Observer和Subject两个类。具体观察者和具体被观察者则是ConcreteObserver和ConcreteSubject两个类。
在具体被观察者中,attach(in:Observer)方法的实现通过向observers_列表中添加观察者来实现。在notify()方法中,遍历observers_列表,逐个通知每个观察者。
在main()函数中,先创建了一个具体被观察者和两个具体观察者。然后通过调用attach()方法将观察者注册到被观察者中,最后调用notify()方法通知所有观察者。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)