您的位置:首页 > 编程语言 > C语言/C++

C++工厂方法模式

2016-07-14 17:35 337 查看
class IFactoryBase
{
public:
IFactoryBase(void);
virtual ~IFactoryBase(void);

public:
virtual IProductBase* CreateProduct() = 0;
};

class IProductBase
{
public:
IProductBase(void);
~IProductBase(void);

public:
virtual void SetProductInfo() = 0;
};

class CFactoryA : public IFactoryBase
{
public:
CFactoryA(void);
~CFactoryA(void);

public:
virtual IProductBase* CreateProduct();
};

IProductBase* CFactoryA::CreateProduct()
{
return new CProductA();
}

class CProductA : public IProductBase
{
public:
CProductA(void);
~CProductA(void);

public:
void SetProductInfo(){}
};

class CFactoryB : public IFactoryBase
{
public:
CFactoryB(void);
~CFactoryB(void);

public:
virtual IProductBase* CreateProduct();
};

IProductBase* CFactoryB::CreateProduct()
{
return new CProductB();
}

class CProductB : public IProductBase
{
public:
CProductB(void);
~CProductB(void);

public:
virtual void SetProductInfo(){}
};

int _tmain(int argc, _TCHAR* argv[])
{
73     IFactoryBase *pFactory = new CFactoryA();
74     if (NULL != pFactory)
75     {
76         IProductBase *pProductBase = pFactory->CreateProduct();
77         if (NULL != pProductBase)
78         {
79             pProductBase->SetProductInfo();
80         }
81
82         delete pProductBase;
83     }
84
85     delete pFactory;

return 0;
}


核心思想:将工厂抽象出来,将产品抽象出来,子工厂负责new 子产品指针,返回抽象产品类指针,外面调用时只需要生成基类工厂指针,调用创建产品函数,就可以对该产品进行具体的操作,优点是能够将添加产品完全独立出来不再修改内部代码。

与简单工厂比较:修正了简单工厂模式中不遵循开放---封闭原则,例如添加新产品时仍需要修改工厂基类内容,工厂方法模式将判断移动到客户端实现。



部分代码:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: