本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客
模式说明:
- 方案:观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。它包括两个关键角色:主题(Subject)和观察者(Observer)。主题负责维护一组观察者,并通知它们状态的变化。观察者订阅主题,并在主题状态变化时得到通知并进行相应的更新。
- 优点:降低了对象之间的耦合度,使得对象之间的交互更加灵活。可以轻松地添加新的观察者,而不需要修改主题。
- 缺点:如果观察者数量过多,可能会导致性能下降。
本质思想: 观察者模式的本质是将对象之间的依赖关系从硬编码的方式转变为松耦合的方式,使得对象之间能够动态地交互。
实践建议:一种软件内部模块之间的异步通知方式之一。十分好用,在软件系统中十分常见。
代码示例:
cpp
#include <iostream>
#include <vector>
// 观察者接口
class Observer {
public:
virtual void update() = 0;
};
// 主题类
class Subject {
public:
void attach(Observer* observer) {
observers_.push_back(observer);
}
void detach(Observer* observer) {
// 省略了从观察者列表中删除指定观察者的逻辑
}
void notify() {
for (auto observer : observers_) {
observer->update();
}
}
private:
std::vector<Observer*> observers_;
};
// 具体观察者类
class ConcreteObserver : public Observer {
public:
void update() override {
std::cout << "Observer updated" << std::endl;
}
};
int main() {
// 创建主题和观察者
Subject subject;
ConcreteObserver observer;
// 订阅主题
subject.attach(&observer);
// 主题状态改变,通知观察者
subject.notify();
/*
输出:Observer updated
*/
return 0;
}