设计模式(6)–工厂方法模式

Posted by Tango on October 9, 2015

工厂方法模式与简单工厂模式类似,都是数据创建型模式,是用于创建对象的设计模式。与简单工厂模式不同的是,工厂方法模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。对于简单工厂而言,客户只需要知道一个接口即可,但这样的一个接口的问题是不方便扩展,简单工厂的内部维护工作量是比较大的,使用工厂方法模式则可灵活的扩展工厂接口。

模式适用性

  • 当一个类不知道它所必须创建的对象的类的时候
  • 当一个类希望由它的子类来制定它所创建的对象的时候
  • 当需要比简单工厂更好的维护性时

模式结构

实现

#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;
}