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

01_23 种设计模式之《简单工厂模式》

文章目录

    • 一、什么是设计模式
    • 二、设计模式类型
    • 简单工厂模式及应用场景
      • 定义抽象产品类和具体产品类
      • 实现工厂类
      • 客户端代码
      • 注意事项

一、什么是设计模式

设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,特定问题的解决方案,基于面向对象的设计原则:主要是对接口编程
而不是对实现编程、优先使用对象组合而不是继承

二、设计模式类型

23 种设计模式可分为三类:创建型模式、结构型模式、行为模式。
简单工厂模式、单例模式、抽象工厂模式、原型模式、建造者模式(5 种)。
代理模式、外观模式、享元模式、组合模式、装饰器模式、适配器模式、桥接模式(7 种)。
访问者模式、策略模式、模板模式、状态模式、备忘录模式、观察者模式、中介者模式、迭代器模式、解释器模式、责任链模式、命令模式(11 种)

简单工厂模式及应用场景

简单工厂模式主要解决接口选择问题。
Factory(工厂)的核心部分,负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需对象即可

定义抽象产品类和具体产品类

首先,定义一个抽象产品类几个具体产品类。这些类将实现一个共同的接口

// 抽象产品类
class Product {
public:virtual void use() = 0; // 纯虚函数virtual ~Product() {}   // 虚析构函数,确保派生类对象能正确析构
};// 具体产品类A
class ConcreteProductA : public Product {
public:void use() override {std::cout << "Result of the product A" << std::endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void use() override {std::cout << "Result of the product B" << std::endl;}
};

实现工厂类

接下来,实现一个工厂类,它根据输入参数决定创建哪种产品对象。

// 工厂类
class SimpleFactory {
public:static Product* createProduct(const std::string& type) {if (type == "A") {return new ConcreteProductA();} else if (type == "B") {return new ConcreteProductB();}return nullptr;}
};

客户端代码

最后,编写客户端代码,使用工厂类创建产品对象。

#include <iostream>
#include <string>int main() {std::string type = "A"; // 假设客户端需要创建产品AProduct* product = SimpleFactory::createProduct(type);if (product != nullptr) {product->use();delete product; // 记得释放内存}type = "B"; // 现在客户端需要创建产品Bproduct = SimpleFactory::createProduct(type);if (product != nullptr) {product->use();delete product; // 记得释放内存}return 0;
}

注意事项

扩展性:如果产品类非常多,工厂类可能会变得复杂。在这种情况下,可以考虑使用工厂方法模式或抽象工厂模式。

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

相关文章:

  • Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一
  • 【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架
  • C语言中的文件操作(二)
  • 【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
  • Ubuntu 22.04 安装 KVM
  • 101 公司战略的基本概念
  • 【devops】devops-ansible之剧本初出茅庐--搭建rsync和nfs
  • @RestController 和 @Controller 注解的联系及要点
  • 机器学习篇-day03-线性回归-正规方程与梯度下降-模型评估-正则化解决模型拟合问题
  • 图像人脸与视频人脸匹配度检测
  • 【AI绘画】Midjourney进阶:对称构图详解
  • 道路积水检测数据集 1450张 路面积水 带分割 voc yolo
  • 上门安装维修系统小程序开发详解及源码示例
  • 03_23 种设计模式之《原型模式》
  • 【秋招笔试】10.08华为荣耀秋招(已改编)-三语言题解
  • 基于ResNet50模型的船型识别与分类系统研究
  • 一个为分布式环境设计的任务调度与重试平台,高灵活高效率,系统安全便捷,分布式重试杀器!(附源码)
  • 攻防世界(CTF)~Misc-Banmabanma
  • 获取淘宝直播间弹幕数据的技术探索实践方法
  • Python 卸载所有的包
  • JWT(JSON Web Token)、Token、Session和Cookie
  • 国内知名人工智能AI大模型专家培训讲师唐兴通讲授AI办公应用人工智能在营销与销售过程中如何应用数字化赋能
  • Android常用C++特性之std::swap
  • MongoDB数据库详解:特点、架构与应用场景
  • 【C语言刷力扣】1678.设计Goal解析器
  • RK3568平台开发系列讲解(I2C篇)i2c 总线驱动介绍
  • xilinx中bufgce
  • 雷池+frp 批量设置proxy_protocol实现真实IP透传
  • DAY27||回溯算法基础 | 77.组合| 216.组合总和Ⅲ | 17.电话号码的字母组合
  • js基础速成12-正则表达式