工程实践中常见的几种设计模式解析及 C++ 实现
在软件工程中,设计模式是一种通用的解决方案,用于解决常见问题和优化代码结构。它们通过提供一种规范化的编程思想,帮助开发者写出更高效、可维护和可扩展的代码。本文将介绍几种在工程实践中常见的设计模式,包括其实现原理、使用场景以及注意事项,并结合 C++ 语言进行实现。
1. 单例模式 (Singleton Pattern)
实现原理
单例模式确保一个类只有一个实例,并提供全局访问点。其核心思想是通过控制构造函数和复制操作符,使得类只能生成一个对象实例。
关键点:
- 隐藏构造函数(将构造函数设为私有)。
- 提供一个静态方法用于获取唯一实例。
- 使用懒汉式或饿汉式实现线程安全的单例模式。
使用场景
- 当需要全局只有一个实例时,例如配置管理、日志记录等。
- 需要避免大量重复对象创建的情况。
注意事项
- 单例模式可能会隐藏类之间的依赖关系,导致代码难以维护。
- 线程安全性需要额外处理(如双重检查锁定)。
- 在某些场景下,单例模式可能导致性能问题或内存泄漏。
C++ 实现
class Singleton {
private:
static Singleton* instance;
Singleton() = default; // 隐藏构造函数
~Singleton() = default; // 隐藏析构函数
public:
// 静态方法获取实例(线程安全)
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
// 删除复制操作符,防止复制
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
void doSomething() {
// 业务逻辑
}
};
// 静态变量初始化为 nullptr
Singleton* Singleton::instance = nullptr;
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
if (s1 == s2) {
// 比较两个指针是否相同
// 输出:两者指向同一个实例
}
return 0;
}
2. 工厂模式 (Factory Pattern)
实现原理
工厂模式通过提供一个接口,用于创建对象,而无需显式指定具体类。这提高了代码的灵活性和可扩展性。
关键点:
- 定义一个抽象产品类(Product)。
- 提供一个工厂类(Factory),通过其方法创建具体的子类实例。
- 工厂模式分为简单工厂模式和抽象工厂模式。
使用场景
- 需要根据不同的条件动态选择具体实现时。
- 避免代码直接依赖于具体实现类,提高系统的灵活性。
注意事项
- 工厂类可能会变得复杂,尤其是在支持多种产品的情况下。
- 增加新的产品类需要同时修改工厂类,这可能违反“开闭原则”。
C++ 实现
// 抽象产品类
class Product {
public

最低0.47元/天 解锁文章

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



