当前位置: 首页 > news >正文

【C++设计模式之简单工厂模式】分析及示例

简介

简单工厂模式是一种常见的设计模式,用于创建多种相似对象的实例,属于创建型。
它通过一个工厂类来解耦客户端代码和对象的创建过程,使得客户端无需直接和具体的产品类交互,而只需要通过工厂类获取所需的产品实例即可。

原理

简单工厂模式的核心思想是将对象的创建过程封装在一个工厂类中,客户端只需要提供所需的参数,就能从工厂类中获取对应的实例,从而达到对象创建的目的。
在简单工厂模式中,所有的产品类都是由同一个工厂类来创建的,因此可以对整个系统进行集中管理和控制。

示例

下面是一个简单工厂模式的C++示例:

#include <iostream>
using namespace std;// 抽象产品类
class Product {
public:virtual void use() = 0;
};// 具体产品类A
class ProductA : public Product {
public:void use() override {cout << "Product A is used." << endl;}
};// 具体产品类B
class ProductB : public Product {
public:void use() override {cout << "Product B is used." << endl;}
};// 工厂类
class Factory {
public:// 此处可用枚举定义static Product* createProduct(int type) {if (type == 1) {return new ProductA();} else if (type == 2) {return new ProductB();} else {return nullptr;}}
};int main() {Product* product1 = Factory::createProduct(1);Product* product2 = Factory::createProduct(2);if (product1 != nullptr) {product1->use();}if (product2 != nullptr) {product2->use();}delete product1;delete product2;return 0;
}

解释

在上面的示例中,抽象产品类Product定义了产品的基本接口,具体产品类ProductA和ProductB继承自Product,并实现了use方法。

工厂类Factory中,定义了一个静态方法createProduct,根据传入的参数类型来创建对应的产品实例。使用时,只需要通过Factory::createProduct方法传入参数,就能获取到所需的产品实例。这样就实现了客户端代码和对象创建过程的解耦。

优缺点

简单工厂模式的优点是实现了对象的创建与使用的分离,简化了客户端代码的复杂度,并且集中管理了对象的创建过程,方便修改和扩展。但它也有一些缺点,例如工厂类会变得很庞大,难以维护。同时,由于工厂类需要根据参数类型来创建对象,所以添加新的产品类时,需要修改工厂类的代码,不符合开闭原则。

结论

总结起来,简单工厂模式适用于创建多种相似对象的场景,能够很好地解耦客户端代码和对象创建过程。但在实际应用中,需要权衡其优点和缺点,根据具体场景选择合适的设计模式。

http://www.lryc.cn/news/182309.html

相关文章:

  • 云原生定义整理
  • 华硕X555YI, Win11下无法调节屏幕亮度
  • 踩坑 | vue动态绑定img标签src属性的一系列报错
  • 强化学习环境 - robogym - 学习 - 1
  • 如果在 Mac 上的 Safari 浏览器中无法打开网站
  • 力扣练习——链表在线OJ
  • 四、互联网技术——局域网拓扑结构
  • Spring Webflux DispatcherHandler源码整理
  • 【Netty】ByteToMessageDecoder源码解析
  • DevEco Studio设置Nodejs提示路径只能包含英文、数字、下划线等
  • 大模型 Decoder 的生成策略
  • 队列和栈相互实现
  • Node.js 是如何处理请求的
  • 数据结构与算法之堆: Leetcode 215. 数组中的第K个最大元素 (Typescript版)
  • SpringBoot快速入门
  • 深度学习笔记_4、CNN卷积神经网络+全连接神经网络解决MNIST数据
  • 高效的开发流程搭建
  • 浅谈OV SSL 证书的优势
  • 一篇博客学会系列(3) —— 对动态内存管理的深度讲解以及经典笔试题的深度解析
  • 【C++ techniques】虚化构造函数、虚化非成员函数
  • 蓝牙核心规范(V5.4)11.6-LE Audio 笔记之初识音频位置和通道分配
  • mysql双主+双从集群连接模式
  • 嵌入式中如何用C语言操作sqlite3(07)
  • RandomForestClassifier 与 GradientBoostingClassifier 的区别
  • 计组——I/O方式
  • jsbridge实战2:Swift和h5的jsbridge通信
  • 集合原理简记
  • 机器学习的超参数 、训练集、归纳偏好
  • Leetcode1071. 字符串的最大公因子(三种方法,带详细解析)
  • 如何像人类一样写HTML之图像标签,超链接标签与多媒体标签