好的,以下是几种现代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++设计模式的核心在于:
- 利用智能指针管理资源与生命周期
- 优先组合而非继承 (如
std::function替代虚函数) - 结合新标准特性(移动语义、Lambda、类型安全容器)
- 强调类型安全与零开销抽象
实际应用中需根据场景灵活组合模式,避免过度设计。