【C/C++】设计模式——工厂模式:简单工厂、工厂方法、抽象工厂

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!

主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!

🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

一、工厂模式的特点

工厂模式提供了一种封装对象创建过程的方式,使得代码更易于管理和扩展。

工厂模式隐藏了对象的具体创建过程,从而可以通过接口 来创建对象,而无需关心具体的实现细节

扩展性高:工厂模式利于后期方法的维护,解耦合。

二、简单工厂模式(静态工厂)

将对象的创建和使用 分离,由一个工厂类根据传入的参数来 决定创建哪一种产品类的实例

cpp 复制代码
#include <iostream>
using namespace std;

class Product 
{
    //抽象类
public:
    virtual void use() = 0; // 纯虚函数,定义产品接口  
};

class ProductA : public Product {
public:
    void use() override 
    {
        cout << "ProductA::use()" << endl;
    }
};

class ProductB : public Product {
public:
    void use() override 
    {
        cout << "ProductB::use()" << endl;
    }
};

class SimpleFactory 
{
    //简单工厂
public:
    static Product* createProduct(const string& type) 
    {
        //根据传入的参数来决定创建哪一种产品类的实例
        if (type == "A") 
        {
            cout << "create ProductA" << endl;
            return new ProductA();
        }
        else if (type == "B") 
        {
            cout << "create ProductB" << endl;
            return new ProductB();
        }
        return nullptr;
    }
};

int main()
{
    //根据产品类型创建产品
    Product* product = SimpleFactory::createProduct("B");
    //使用对应类型的产品
    if (product)
    {
        product->use();
        delete product; 
    }
    return 0;
};

三、工厂方法

简单工厂违背了开闭原则,故将简单工厂中的工厂拆分为多个工厂:

增加产品时 Factory 工厂不用改变,只需要添加对应产品类型的工厂

cpp 复制代码
#include <iostream>
using namespace std;

class Product {
public:
    virtual void use() = 0;
};

class ProductA : public Product {
public:
    void use() override 
    { 
        cout << "ProductA::use()" << endl; 
    }
};

class ProductB : public Product {
public:
    void use() override 
    { 
        cout << "ProductB::use()" << endl; 
    }
};

//工厂方法
class Creator 
{
    //抽象类 工厂方法
public:
    virtual Product* createProduct() = 0; 
};

class CreatorA : public Creator 
{
    //ProductA工厂
public:
    Product* createProduct() override 
    {
        cout << "CreatorA createProduct ProductA" << endl;
        return new ProductA();
    }
};

class CreatorB : public Creator 
{
    //ProductB工厂
public:
    Product* createProduct() override 
    {
        cout << "CreatorB createProduct ProductB" << endl;
        return new ProductB();
    }
};


int main()
{
    //创建工厂:生产A产品类型的工厂
    Creator* creator = new CreatorA();
    //使用该工厂创建产品
    Product* product = creator->createProduct();
    //使用产品
    product->use();

    delete product; // 释放产品  
    delete creator; // 释放工厂
    
    return 0;
};

四、抽象工厂

抽象工厂与工厂方法类似,工厂不止用来生产一种产品,可以用于创建与产品相关的一系列产品

适用于大批量、一系列的对象的生产。


|--------------------------------------|
| 大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |

|---------------------------------------------------------------|
| 大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |

相关推荐
hhcgchpspk1 分钟前
easyx按键游戏
c++·stm32·单片机·游戏·easyx
魔法阵维护师3 分钟前
从零开发游戏需要学习的c#模块,第二十一章(精灵动画 —— 让角色走起来)
学习·游戏·c#
jimmyleeee4 分钟前
人工智能基础知识笔记四十:Claude 扩展机制深度解构:Command、Skill、Sub-agent 与 Hook 的四层协同架构
人工智能·笔记
郝学胜-神的一滴4 分钟前
Qt 高级开发 011: 跨线程信号槽实战
开发语言·c++·qt·程序人生·开源软件·用户界面
学困昇8 分钟前
Linux 动静态库制作与原理:从 .a、.so 到 ELF 加载一次讲透
linux·运维·服务器·c语言·开发语言·c++·人工智能
xian_wwq9 分钟前
【学习笔记】探讨大模型应用安全建设系列6——合规备案:大模型备案与监管合规实操
笔记·学习·安全
kels889911 分钟前
加密货币实时api的订单簿快照多久更新一次?
开发语言·笔记·python·金融·区块链
Byte Wizard13 分钟前
C语言数据在内存中的存储
c语言·开发语言
basketball61615 分钟前
C++面试考点 头文件与实现文件形式
开发语言·c++
历程里程碑16 分钟前
56 . 高效ET非阻塞IO服务器设计指南
java·运维·服务器·开发语言·数据结构·c++·排序算法