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

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


1. 资源管理(RAII)

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

  • 使用智能指针:std::unique_ptr、std::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::variant或std::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. 强调类型安全与零开销抽象

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

相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
weilx12343 天前
C++笔记-文件IO-<fcntl.h>
c++
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python