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

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"; // 假设客户端需要创建产品A
    Product* product = SimpleFactory::createProduct(type);
    if (product != nullptr) {
        product->use();
        delete product; // 记得释放内存
    }

    type = "B"; // 现在客户端需要创建产品B
    product = SimpleFactory::createProduct(type);
    if (product != nullptr) {
        product->use();
        delete product; // 记得释放内存
    }

    return 0;
}

注意事项

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


http://www.kler.cn/news/340013.html

相关文章:

  • (实习日报)广告技术平台实习工作日报 9月29号-10月7号(国庆快乐)
  • vue3+vant4+微信公众号实现图片上传和扫一扫功能
  • 『网络游戏』动态界面制作创建角色UI【02】
  • Dubbo常见的几个八股题
  • 前端基础面试题·第四篇——Vue(其二)
  • 基于H3C环境的实验——OSPF
  • 全面图解Docker架构设计:掌握Docker全链路思维与优化(命令篇)
  • 面试中遇到的关于Transformer模型的问题有哪些?
  • B2B2C商城系统如何优化合作伙伴关系
  • MySql表结构设计 - 数据操作语言
  • 2024-10-08 问AI: [AI面试题] 什么是人工智能?
  • Ubuntu 18.04安装storcli查看阵列信息
  • 力扣【2187-完成旅途的最少时间】【数组-C语言实现】
  • 【斯坦福CS144】Lab0
  • 银河麒麟操作系统设置指定用户访问共享文件夹
  • ComfyUI【基础篇】:小白都可以学会的ComfyUI安装教程(秋叶版安装包)
  • df命令输出的详细解释
  • 11、论文阅读:无监督夜间图像增强:层分解与光效抑制的结合
  • C++ 秋招查缺补漏
  • Mysql:数据库和表增删查改基本语句