观察者模式概述
观察者模式是一种行为型设计模式,用于在对象之间建立一对多的依赖关系。当一个对象(称为主题)的状态发生变化时,所有依赖于它的对象(称为观察者)都会自动收到通知并更新。这种模式广泛应用于事件处理系统、GUI 框架和实时数据监控等场景。
C++20 引入了新的语言特性,如概念(Concepts)、协程(Coroutines)和范围(Ranges),这些特性可以优化观察者模式的实现。以下将详细探讨如何在 C++20 中高效实现观察者模式。
观察者模式的核心组件
观察者模式通常包含两个主要角色:主题(Subject)和观察者(Observer)。主题维护一个观察者列表,并在状态变化时通知观察者。观察者则实现统一的接口,以便主题能够调用其更新方法。
主题接口
主题需要提供注册、注销和通知观察者的功能。以下是一个典型的主题接口定义:
#include <vector>
#include <memory>
#include <algorithm>
template <typename T>
class Subject {
public:
virtual ~Subject() = default;
virtual void attach(std::shared_ptr<T> observer) = 0;
virtual void detach(std::shared_ptr<T> observer) = 0;
virtual void notify() = 0;
protected:
std::vector<std::shared_ptr<T>> observers_;
};
观察者接口
观察者接口通常只包含一个更新方法,用于接收主题的通知:
class Observer {
public:
virtual ~Observer() = default;
virtual void update() = 0;
};
C++20 优化实现
C++20 的现代特性可以简化观察者模式的实现并提升性能。以下是一个利用 std::function 和 lambda 表达式的改进版本。
使用 std::function 替代抽象接口
通过 `
观察者模式概述
观察者模式是一种行为型设计模式,用于在对象之间建立一对多的依赖关系。当一个对象(称为主题)的状态发生变化时,所有依赖于它的对象(称为观察者)都会自动收到通知并更新。这种模式广泛应用于事件处理系统、GUI 框架和实时数据监控等场景。
C++20 引入了新的语言特性,如概念(Concepts)、协程(Coroutines)和范围(Ranges),这些特性可以优化观察者模式的实现。以下将详细探讨如何在 C++20 中高效实现观察者模式。
观察者模式的核心组件
观察者模式通常包含两个主要角色:主题(Subject)和观察者(Observer)。主题维护一个观察者列表,并在状态变化时通知观察者。观察者则实现统一的接口,以便主题能够调用其更新方法。
主题接口
主题需要提供注册、注销和通知观察者的功能。以下是一个典型的主题接口定义:
#include <vector>
#include <memory>
#include <algorithm>
template <typename T>
class Subject {
public:
virtual ~Subject() = default;
virtual void attach(std::shared_ptr<T> observer) = 0;
virtual void detach(std::shared_ptr<T> observer) = 0;
virtual void notify() = 0;
protected:
std::vector<std::shared_ptr<T>> observers_;
};
观察者接口
观察者接口通常只包含一个更新方法,用于接收主题的通知:
class Observer {
public:
virtual ~Observer() = default;
virtual void update() = 0;
};
C++20 优化实现
C++20 的现代特性可以简化观察者模式的实现并提升性能。以下是一个利用 std::function 和 lambda 表达式的改进版本。
使用 std::function 替代抽象接口
通过 `

822

被折叠的 条评论
为什么被折叠?



