工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
UML类图:
类之间的依赖关系:
程序源码:
#include<iostream>
#include<string>
using namespace std;
/* 抽象产品基类 */
class AbstractProduct
{
public:
AbstractProduct(){}
virtual void doSomeThing(){}; //示例
virtual ~AbstractProduct(){}; //设置为虚析构函数,防止内存泄漏 ,使用delete删除基类时保证使用子类的析构函数
};
/* 抽象工厂基类 */
class AbstractFactory
{
public:
virtual AbstractProduct* createProduct(int productType) = 0;
virtual ~AbstractFactory(){}
};
/* 具体产品 */
class ConcreteProduct : public AbstractProduct
{
public:
ConcreteProduct(){}
void doSomeThing(){ cout<<"Product"<<endl; }
~ConcreteProduct(){ cout<<"ConcreteProduct Destructor"<<endl; }
};
/* 具体工厂 */
class ConcreteFactory : public AbstractFactory
{
public:
AbstractProduct *createProduct(int productType);
~ConcreteFactory(){ cout<<"ConcreteFactory Destructor"<<endl; }
};
AbstractProduct * ConcreteFactory::createProduct(int productType)
{
AbstractProduct * product;
switch(productType)
{
case 1:
product = new ConcreteProduct();
break;
}
return product;
}
int main()
{
AbstractFactory *factory = new ConcreteFactory();
AbstractProduct * product = factory->createProduct(1);
product->doSomeThing();
delete factory;
delete product;
return 0;
}