作用:
定义一个创建对象的接口,让子类决定实例化哪一个类;
工厂模式使一个类的实例化延迟到子类。
代码如下:
#pragma once
#ifndef INCLUDE_MYFACTORY_H
#define INCLUDE_MYFACTORY_H
//商品抽象基类
class ProductCL
{
protected:
ProductCL(){};
public:
virtual ~ProductCL()=0;
};
//商品实做类
class ConcreteProductCL :public ProductCL
{
public:
ConcreteProductCL(){};
virtual ~ConcreteProductCL(){};
};
//工厂抽象基类
class FactoryCL
{
protected:
FactoryCL(){};
public:
~FactoryCL(){};
public:
ProductCL *GetProduct()
{
return CreateProduct();
};
public:
virtual ProductCL *CreateProduct() = 0;//
};
//工厂实做类
class ConcreteFactoryCL:public FactoryCL
{
public:
ConcreteFactoryCL(){};
~ConcreteFactoryCL(){};
public:
ProductCL *CreateProduct()
{
return new ConcreteProductCL();
};
};
#endif
在这个模式中,有两个抽象基类:
一个是ProductCL,对象的抽象基类;
一个是FactoryCL,工厂的抽象基类.
在互相协作的时候都是由相应的FactoryCL派生类来生成ProductCL的派生类,
也就是说如果要新增一种Product那么也要对应的新增一个Factory.
创建的过程委托给了这个Factory.
也就是说一个Factory和一个Product是一一对应的关系.