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

大话设计模式之简单工厂模式

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,属于工厂模式的一种。在简单工厂模式中,有一个工厂类负责根据输入参数的不同来创建不同类的实例。

简单工厂模式包含以下几个要素:
1. **工厂类(Factory Class)**:工厂类包含一个方法,根据传入的参数动态地创建并返回不同类的实例。
   
2. **产品接口(Product Interface)**:产品接口是被创建的对象所共享的接口或抽象类。

3. **具体产品类(Concrete Product Classes)**:具体产品类是实现产品接口的具体类,由工厂类根据条件创建。

简单工厂模式的优点包括:
- 将对象创建和业务逻辑分离,客户端只需要知道工厂类即可,不需要关心具体的实现细节。
- 容易扩展,如果需要添加新的产品类,只需修改工厂类即可,符合开闭原则。

然而,简单工厂模式也有缺点,最主要的是当产品类较多时,工厂类会变得庞大且难以维护,违反了单一职责原则。

总的来说,简单工厂模式适合于需要创建的对象较少且不频繁变化的情况下使用,能够有效地封装对象的创建过程。

#include <iostream>
#include <memory>// 产品接口
class Product {
public:virtual void operation() = 0;
};// 具体产品类A
class ConcreteProductA : public Product {
public:void operation() override {std::cout << "Product A operation" << std::endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void operation() override {std::cout << "Product B operation" << std::endl;}
};// 简单工厂类
class SimpleFactory {
public:Product *createProduct(int type){switch (type) {case 1:return new ConcreteProductA;case 2:return new ConcreteProductB;default:return nullptr;}}
};int main(int argc, char *argv[])
{SimpleFactory factory;// 创建产品AProduct *productA = factory.createProduct(1);productA->operation();// 创建产品BProduct *productB = factory.createProduct(2);productB->operation();return 0;
}/*
在这个例程中,我们定义了一个产品接口 Product,并实现了两个具体产品类 ConcreteProductA 和 ConcreteProductB。然后,我们创建了一个简单工厂类 SimpleFactory,其中包含了根据输入参数创建不同产品对象的方法。在 main 函数中,我们使用简单工厂来创建不同类型的产品对象并调用其方法进行操作。
*/

觉得有帮助的话,打赏一下呗。。

           

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

相关文章:

  • 设计模式之单例模式精讲
  • 论文复现3:Stable Diffusion v1
  • Halcon与VisionMaster对比
  • 多线程的学习1
  • 警务数据仓库的实现
  • Excel·VBA数组分组问题
  • 【笔记】Hbase基础笔记
  • 创建vue3项目并集成cesium插件运行
  • Mac 装 虚拟机 vmware、centos7等
  • 工厂能耗管控物联网解决方案
  • 中间件学习
  • iOS开发进阶(十一):ViewController 控制器详解
  • 修改mysql密码
  • uniapp 使用命令行创建vue3 ts 项目
  • 一周学会Django5 Python Web开发-Django5模型定义
  • kingbaseESV8逻辑备份还原
  • FreeRtos作业1
  • spring boot dynamic 动态数据数据源配置连接池
  • vue3中如何使用 watch 函数来观察响应式数据的变化
  • 自建机房私有云吗?
  • 解决npm init vue@latest证书过期问题:npm ERR! code CERT_HAS_EXPIRED
  • 缓存和缓存的常用使用场景
  • 模板方法模式(继承的优雅使用)
  • 百度智能云千帆,产业创新新引擎
  • Python下载cuda包失败后到成功(方便使用GPU加速运算,显著提高代码运行速度)
  • 【Flink】Flink 处理函数之基本处理函数(一)
  • 【Java - 框架 - Lombok】(2) SpringBoot整合Lombok完成日志的创建使用 - 快速上手;
  • linux 系统安装php 8.0.2
  • 你管这破玩意叫网络
  • 系统开发实训小组作业week5 —— 用例描述与分析