创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥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;
};
四、抽象工厂
抽象工厂与工厂方法类似,工厂不止用来生产一种产品,可以用于创建与产品相关的一系列产品
适用于大批量、一系列的对象的生产。
|--------------------------------------|
| 大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
|---------------------------------------------------------------|
| 大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |