UML类图(仅供参考)如下:
工厂模式解决的问题:
它提供了一种创建对象的最佳方式,在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象
源码
#include <iostream>
// 抽象产品
class CProduct
{
public:
virtual ~CProduct() {}
virtual void Show() = 0;
};
// 抽象产品的第一种具体表现
class CProduct1 :public CProduct
{
public:
virtual void Show()
{
printf("我是产品1\n");
}
};
// 抽象产品的第二种具体表现
class CProduct2 :public CProduct
{
public:
virtual void Show()
{
printf("我是产品2\n");
}
};
// 抽象工厂
class CFactory
{
public:
virtual ~CFactory() {}
virtual CProduct *Create() = 0;
};
// 生产第一种产品的具体工厂
class CFactory1 :public CFactory
{
public:
virtual CProduct *Create()
{
return new CProduct1();
}
};
// 生产第二种产品的具体工厂
class CFactory2 :public CFactory
{
public:
virtual CProduct *Create()
{
return new CProduct2();
}
};
// 测试
int main()
{
CFactory *pFactory1 = new CFactory1();
pFactory1->Create()->Show();
CFactory *pFactory2 = new CFactory2();
pFactory2->Create()->Show();
}
好处
1、一个调用者想创建一个对象,只要知道其名称就可以了
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以
3、屏蔽产品的具体实现,调用者只关心产品的接口