加拿大服务器做网站,河南建设厅二建公示网站首页,wordpress启用域名邮,中小学图书馆网站建设文章目录 前言代码仓库简单工厂模式#xff08;Simple Factory#xff09;工厂方法模式#xff08;Factory Method#xff09;抽象工厂模式#xff08;Abstract Factory#xff09;总结参考资料作者的话 前言
简单工厂、工厂方法和抽象工厂模式#xff08;创建型设计模… 文章目录 前言代码仓库简单工厂模式Simple Factory工厂方法模式Factory Method抽象工厂模式Abstract Factory总结参考资料作者的话 前言
简单工厂、工厂方法和抽象工厂模式创建型设计模式的 C 代码示例模板。 代码仓库
yezhening/Programming-examples: 编程实例 (github.com)Programming-examples: 编程实例 (gitee.com) 简单工厂模式Simple Factory
结构
抽象产品类具体产品类 A具体产品类 B简单工厂类简单工厂类的静态方法创建具体产品对象 A 和具体产品对象 B
核心
继承多态一个工厂创建多类产品
代码
#include iostream
#include string
#include memoryusing std::cerr;
using std::cout;
using std::endl;
using std::make_unique;
using std::string;
using std::unique_ptr;// 抽象产品类
class AbstractProduct
{
public:AbstractProduct() default;virtual ~AbstractProduct() default;virtual void func() 0;
};// 具体产品类 A
class ConcreteProductA : public AbstractProduct
{
public:ConcreteProductA() default;~ConcreteProductA() override default;void func() override{cout ConcreteProductA endl;}
};// 具体产品类 B
class ConcreteProductB : public AbstractProduct
{
public:ConcreteProductB() default;~ConcreteProductB() override default;void func() override{cout ConcreteProductB endl;}
};// 简单工厂类
class SimpleFactory
{
public:// 静态方法依据类型创建不同的具体产品static unique_ptrAbstractProduct create_concrete_product(const string concrete_product_type){if (concrete_product_type A){return make_uniqueConcreteProductA();}else if (concrete_product_type B){return make_uniqueConcreteProductB();}else{cerr Unknown type of concrete product endl;return nullptr;}}
};// 客户端
int main()
{// 使用简单工厂创建不同类型的具体产品unique_ptrAbstractProduct concrete_product_a SimpleFactory::create_concrete_product(A); // 创建具体产品对象 Aif (concrete_product_a ! nullptr){concrete_product_a-func();}unique_ptrAbstractProduct concrete_product_b SimpleFactory::create_concrete_product(B); // 创建具体产品对象 Bif (concrete_product_b ! nullptr){concrete_product_b-func();}unique_ptrAbstractProduct concrete_product_c SimpleFactory::create_concrete_product(C); // 创建具体产品对象 Cif (concrete_product_c ! nullptr){concrete_product_c-func();}return 0;
}
/*
输出
ConcreteProductA
ConcreteProductB
Unknown type of concrete product
*/工厂方法模式Factory Method
结构
抽象产品类具体产品类 A具体产品类 B抽象工厂类具体工厂类 A具体工厂类 B具体工厂对象 A 的方法创建具体产品对象 A具体工厂对象 B 的方法创建具体产品对象 B
核心
继承多态一类工厂创建一类产品
代码
#include iostream
#include memoryusing std::cout;
using std::endl;
using std::make_unique;
using std::unique_ptr;// 抽象产品类
class AbstractProduct
{
public:AbstractProduct() default;virtual ~AbstractProduct() default;virtual void func() 0;
};// 具体产品类 A
class ConcreteProductA : public AbstractProduct
{
public:ConcreteProductA() default;~ConcreteProductA() override default;void func() override{cout ConcreteProductA endl;}
};// 具体产品类 B
class ConcreteProductB : public AbstractProduct
{
public:ConcreteProductB() default;~ConcreteProductB() override default;void func() override{cout ConcreteProductB endl;}
};// 抽象工厂类
class AbstractFactory
{
public:AbstractFactory() default;virtual ~AbstractFactory() default;virtual unique_ptrAbstractProduct create_concrete_product() const 0;
};// 具体工厂类 A
class ConcreteFactoryA : public AbstractFactory
{
public:ConcreteFactoryA() default;~ConcreteFactoryA() override default;inline unique_ptrAbstractProduct create_concrete_product() const override{return make_uniqueConcreteProductA();}
};// 具体工厂类 B
class ConcreteFactoryB : public AbstractFactory
{
public:ConcreteFactoryB() default;~ConcreteFactoryB() override default;inline unique_ptrAbstractProduct create_concrete_product() const override{return make_uniqueConcreteProductB();}
};// 客户端
int main()
{// 使用工厂方法创建不同类型的具体产品unique_ptrAbstractFactory concrete_factory_a make_uniqueConcreteFactoryA(); // 创建具体工厂对象 Aunique_ptrAbstractProduct concrete_product_a concrete_factory_a-create_concrete_product(); // 创建具体产品对象 Aconcrete_product_a-func();unique_ptrAbstractFactory concrete_factory_b make_uniqueConcreteFactoryB(); // 创建具体工厂对象 Bunique_ptrAbstractProduct concrete_product_b concrete_factory_b-create_concrete_product(); // 创建具体产品对象 Bconcrete_product_b-func();return 0;
}
/*
输出
ConcreteProductA
ConcreteProductB
*/抽象工厂模式Abstract Factory
结构
抽象产品类 A具体产品类 A1具体产品类 B1抽象产品类 B具体产品类 B1具体产品类 B2抽象工厂类1具体工厂类1抽象工厂类2具体工厂类2具体工厂对象1 的方法创建具体产品对象 A1 和 具体产品对象 B1具体工厂对象2 的方法创建具体产品对象 A2 和 具体产品对象 B2
核心
继承多态产品和工厂形成二维结构工厂1创建产品 A1 和 B1工厂2创建产品 A2 和 B2
代码
#include iostream
#include memoryusing std::cout;
using std::endl;
using std::make_unique;
using std::unique_ptr;// 抽象产品类 A
class AbstractProductA
{
public:AbstractProductA() default;virtual ~AbstractProductA() default;virtual void func() 0;
};// 具体产品类 A1
class ConcreteProductA1 : public AbstractProductA
{
public:ConcreteProductA1() default;~ConcreteProductA1() override default;void func() override{cout ConcreteProductA1 endl;}
};// 具体产品类 A2
class ConcreteProductA2 : public AbstractProductA
{
public:ConcreteProductA2() default;~ConcreteProductA2() override default;void func() override{cout ConcreteProductA2 endl;}
};// 抽象产品类 B
class AbstractProductB
{
public:AbstractProductB() default;virtual ~AbstractProductB() default;virtual void func() 0;
};// 具体产品类 B1
class ConcreteProductB1 : public AbstractProductB
{
public:ConcreteProductB1() default;~ConcreteProductB1() override default;void func() override{cout ConcreteProductB1 endl;}
};// 具体产品类 B2
class ConcreteProductB2 : public AbstractProductB
{
public:ConcreteProductB2() default;~ConcreteProductB2() override default;void func() override{cout ConcreteProductB2 endl;}
};// 抽象工厂类
class AbstractFactory
{
public:AbstractFactory() default;virtual ~AbstractFactory() default;virtual unique_ptrAbstractProductA create_product_a() const 0;virtual unique_ptrAbstractProductB create_product_b() const 0;
};// 具体工厂类 1
class ConcreteFactory1 : public AbstractFactory
{
public:ConcreteFactory1() default;virtual ~ConcreteFactory1() default;inline unique_ptrAbstractProductA create_product_a() const override{return make_uniqueConcreteProductA1();}inline unique_ptrAbstractProductB create_product_b() const override{return make_uniqueConcreteProductB1();}
};// 具体工厂类 2
class ConcreteFactory2 : public AbstractFactory
{
public:ConcreteFactory2() default;virtual ~ConcreteFactory2() default;inline unique_ptrAbstractProductA create_product_a() const override{return make_uniqueConcreteProductA2();}inline unique_ptrAbstractProductB create_product_b() const override{return make_uniqueConcreteProductB2();}
};// 客户端
int main()
{// 使用抽象工厂创建不同类型的具体产品unique_ptrAbstractFactory concrete_factory_1 make_uniqueConcreteFactory1(); // 创建具体工厂对象1unique_ptrAbstractProductA concrete_product_a1 concrete_factory_1-create_product_a(); // 创建具体产品对象 A1unique_ptrAbstractProductB concrete_product_b1 concrete_factory_1-create_product_b(); // 创建具体产品对象 B1concrete_product_a1-func();concrete_product_b1-func();unique_ptrAbstractFactory concrete_factory_2 make_uniqueConcreteFactory2(); // 创建具体工厂2unique_ptrAbstractProductA concrete_product_a2 concrete_factory_2-create_product_a(); // 创建具体产品对象 B1unique_ptrAbstractProductB concrete_product_b2 concrete_factory_2-create_product_b(); // 创建具体产品对象 B1concrete_product_a2-func();concrete_product_b2-func();return 0;
}
/*
输出
ConcreteProductA1
ConcreteProductB1
ConcreteProductA2
ConcreteProductB2
*/总结
简单工厂、工厂方法和抽象工厂模式创建型设计模式的 C 代码示例模板。 参考资料
【精选】创建型设计模式总结_夜悊的博客-CSDN博客 作者的话
感谢参考资料的作者/博主作者夜悊版权所有转载请注明出处谢谢~如果文章对你有帮助请点个赞或加个粉丝吧你的支持就是作者的动力~文章在描述时有疑惑的地方请留言定会一一耐心讨论、解答文章在认识上有错误的地方, 敬请批评指正望读者们都能有所收获