作用:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
解析:
在这个模式中,有两个抽象基类,一个是Product为创建出来的对象的抽象基类,一个是Factory是工厂的抽象基类,在互相协作的时候都是由相应的Factory派生类来生成Product的派生类,也就是说如果要新增一种Product那么也要对应的新增一个Factory,创建的过程委托给了这个Factory。也就是说一个Factory和一个Product是一一对应的关系。
Factory.h
class Product
{
public:
Product(){}
virtual ~Product(){}
};
class ConcreateProduct
: public Product
{
public:
ConcreateProduct(){}
virtual ~ConcreateProduct(){}
};
class Factory
{
public:
Factory(){}
virtual ~Factory(){}
virtual Product* CreateProduct() = 0;
};
class ConcreateFactory
: public Factory
{
public:
ConcreateFactory(){}
virtual ~ConcreateFactory(){}
virtual Product* CreateProduct();
};
Factory.cpp
#include "Factory.h"
Product* ConcreateFactory::CreateProduct()
{
return new ConcreateProduct();
}
main.cpp
#include "Factory.h"
int main(int argc, char* argv[])
{
Factory *factory = new ConcreateFactory();
Product *product = factory->CreateProduct();
delete product;
delete factory;
return 0;
}