工厂方法模式与简单工厂模式类似,都是数据创建型模式,是用于创建对象的设计模式。与简单工厂模式不同的是,工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。对于简单工厂而言,客户只需要知道一个接口即可,但这样的一个接口的问题是不方便扩展,简单工厂的内部维护工作量是比较大的,使用工厂方法模式则可灵活的扩展工厂接口。
模式适用性
- 当一个类不知道它所必须创建的对象的类的时候
- 当一个类希望由它的子类来制定它所创建的对象的时候
- 当需要比简单工厂更好的维护性时
模式结构
实现
#include <iostream>
using namespace std;
class Light
{
public:
virtual void Show() = 0;
};
class BulbLight : public Light
{
public:
void Show()
{
cout << "I'm BulbLight" << endl;
}
};
class TubeLight : public Light
{
public:
void Show()
{
cout << "I'm TubeLight" << endl;
}
};
class Creator
{
public:
virtual Light* Factory() = 0;
};
class BulbCreator : public Creator
{
public:
Light* Factory()
{
return new BulbLight();
}
};
class TubeCreator : public Creator
{
public:
Light* Factory()
{
return new TubeLight ();
}
};
int main(int argc , char *argv [])
{
Creator *bulbFactory = new BulbCreator();
Light *bulb = bulbFactory->Factory();
bulb->Show();
Creator *tubeFactory = new TubeCreator();
Product *tube = tubeFactory->Factory();
tube->Show();
return 0;
}