自己也是编了很多年的程序了,之前很多时候都是面向过程和面向实现编程的,做算法研究还行,但做稍大点的应用程序就感觉很多时候做了很多的重复工作。这些工作大多时候都是相同的代码,只是稍微改动变量,同时这些重复工作让程序的逻辑变得非常复杂,非常容易隐藏BUG!!!
参考文章链接:https://blog.csdn.net/CoderAldrich/article/details/83272866
1.三种产品工厂模式的简介
简单工厂模式:如下图所示,有多个操作(ProductA,ProductB,ProductC的show())可供选择,初始化的时候需要决定Factory内是什么具体的操作。
工厂方法模式:在简单工厂模式下,需要再加一个操作(ProductB的show())。为了不影响前面简单工厂模式的代码,需要
不同的工厂有一个父类。这个父类的虚函数是构建不同的子类。不同的产品有一个父类。这个父类的虚函数是构建不同的操作。真正的使用方法,再构建的时候用不同的此类构建对象。然后给对象根据不同的操作进行初始化。
抽象工厂模式:工厂方法模式虽然可以在不影响之前代码的基础上新增功能。但随着功能增加的越来越多,管理起来也越来越麻烦了。
2.三种产品工厂模式的具体实现
简单工厂模式的具体实现为:创造一个产品父类,操作作为它的虚函数。不同的产品子类,重写这个虚函数。然后另外创造一个工厂类,通过输入参数来决定工厂中的产品初始化为哪一个产品子类。
#include <iostream>
#include <vector>
using namespace std;
typedef enum ProductTypeTag
{
TypeA,
TypeB,
TypeC
}PRODUCTTYPE;
// Here is the product class
class Product
{
public:
virtual void Show() = 0;
};
class ProductA : public Product
{
public:
void Show()
{
cout<<"I'm ProductA"<<endl;
}
};
class ProductB : public Product
{
public:
void Show()
{
cout<<"I'm ProductB"<<endl;
}
};
class ProductC : public Product
{
public:
void Show()
{
cout<<"I'm ProductC"<<endl;
}
};
// Here is the Factory class
class Factory
{
public:
Product* CreateProduct(PRODUCTTYPE type)
{
switch (type)
{
case TypeA:
return new ProductA();
case TypeB:
return new ProductB();
case TypeC:
return new ProductC();
default:
return NULL;
}
}
};
int main(int argc, char *argv[])
{
// First, create a factory object
Factory *ProductFactory = new Factory();
Product *productObjA = ProductFactory->CreateProduct(TypeA);
if (productObjA != NULL)
productObjA->Show();
Product *productObjB = ProductFactory->CreateProduct(TypeB);
if (productObjB != NULL)
productObjB->Show();
Product *productObjC = ProductFactory->CreateProduct(TypeC);
if (productObjC != NULL)
productObjC->Show();
delete ProductFactory;
ProductFactory = NULL;
delete productObjA;
productObjA = NULL;
delete productObjB;
productObjB = NULL;
delete productObjC;
productObjC = NULL;
return 0;
}