能否给出更多现代C++架构设计模式?

好的,以下是几种现代C++中常见且实用的架构设计模式,结合了C++11/14/17等新特性:


1. 资源管理(RAII)

核心思想 :通过对象的生命周期管理资源(如内存、文件句柄、网络连接),确保资源自动释放。
现代实现

  • 使用智能指针:std::unique_ptrstd::shared_ptr
  • 结合移动语义(std::move)优化所有权转移
cpp 复制代码
class FileHandler {
public:
    FileHandler(const std::string& path) : file_(std::make_unique<std::ifstream>(path)) {
        if (!file_->is_open()) throw std::runtime_error("File open failed");
    }
    // 自动关闭文件(析构时)
private:
    std::unique_ptr<std::ifstream> file_;
};

2. 策略模式(Strategy)

核心思想 :将算法抽象为接口,通过组合动态替换行为。
现代优化

  • 使用std::function和Lambda替代传统接口类
  • 减少虚函数开销
cpp 复制代码
class Sorter {
public:
    using SortStrategy = std::function<void(std::vector<int>&)>;
    explicit Sorter(SortStrategy strategy) : strategy_(std::move(strategy)) {}
    void sort(std::vector<int>& data) { strategy_(data); }
private:
    SortStrategy strategy_;
};

// 使用Lambda定义策略
auto quick_sort = [](auto& data) { /* 快速排序实现 */ };
Sorter sorter(quick_sort);

3. 工厂模式(Factory)

核心思想 :封装对象创建逻辑,降低耦合。
现代扩展

  • 结合std::variantstd::any支持多态返回
  • 使用std::make_unique避免裸指针
cpp 复制代码
class ShapeFactory {
public:
    enum class Type { Circle, Rectangle };
    std::unique_ptr<Shape> create(Type type) {
        switch (type) {
            case Type::Circle:     return std::make_unique<Circle>();
            case Type::Rectangle:  return std::make_unique<Rectangle>();
            default:               return nullptr;
        }
    }
};

4. 观察者模式(Observer)

核心思想 :定义一对多的依赖关系,当对象状态变化时自动通知依赖项。
现代优化

  • 使用std::function和信号槽库(如Boost.Signals2)
  • 避免继承链
cpp 复制代码
class EventDispatcher {
public:
    using Listener = std::function<void(const Event&)>;
    void addListener(Listener listener) { listeners_.push_back(std::move(listener)); }
    void notify(const Event& event) {
        for (auto& listener : listeners_) listener(event);
    }
private:
    std::vector<Listener> listeners_;
};

5. 依赖注入(Dependency Injection)

核心思想 :通过外部传入依赖对象,提高模块可测试性和灵活性。
现代实践

  • 结合构造函数或Setter注入
  • 使用std::shared_ptr管理共享依赖
cpp 复制代码
class DatabaseService {
public:
    explicit DatabaseService(std::shared_ptr<IDatabase> db) : db_(std::move(db)) {}
    void saveData(const Data& data) { db_->write(data); }
private:
    std::shared_ptr<IDatabase> db_;
};

6. 状态模式(State)

核心思想 :将状态行为封装在独立类中,通过上下文切换状态。
现代技巧

  • 使用std::unique_ptr管理状态对象
  • 结合enum class明确状态类型
cpp 复制代码
class StateContext {
public:
    void setState(std::unique_ptr<State> new_state) {
        state_ = std::move(new_state);
    }
    void execute() { state_->handle(*this); }
private:
    std::unique_ptr<State> state_;
};

总结

现代C++设计模式的核心在于:

  1. 利用智能指针管理资源与生命周期
  2. 优先组合而非继承 (如std::function替代虚函数)
  3. 结合新标准特性(移动语义、Lambda、类型安全容器)
  4. 强调类型安全与零开销抽象

实际应用中需根据场景灵活组合模式,避免过度设计。

相关推荐
神仙别闹几秒前
基于 C# OpenPGP 的文件管理系统
开发语言·c#
汉克老师2 分钟前
GESP6级C++考试语法知识(四、图与树(四))
c++·贪心算法·优先队列·哈夫曼编码·哈夫曼树·gesp6级·gesp六级
番石榴AI16 分钟前
纯 CPU 推理!0.1B 超轻量级端到端OCR模型,使用 Java 进行文档解析
java·开发语言·ocr
likerhood19 分钟前
ConcurrentHashMap详细讲解(java)
java·开发语言·性能优化
机器学习之心34 分钟前
集成BWM法、熵权法、改进博弈论组合赋权与三角直觉模糊云模型的多属性评价模型,MATLAB代码
开发语言·matlab·熵权法·三角直觉模糊云模型·bwm法·改进博弈论组合赋权·多属性评价模型
子兮曰41 分钟前
whisper.cpp 深度解析:从边缘设备到实时语音识别
前端·c++·后端
特种加菲猫1 小时前
二叉搜索树:数据世界的“快速寻路指南”
开发语言·c++
naturerun1 小时前
从数组中删除元素的算法
数据结构·c++·算法
特种加菲猫1 小时前
STL关联容器:Set/Multiset与Map/Multimap详解
开发语言·c++
我滴老baby1 小时前
0基础速通Python+AI|2026热门轻量化玩法全攻略:从入门到实战,3天搞定AI应用开发
开发语言·人工智能·python