首页 > 程序人生 > 关于工厂方法(Factory Method)模式的一点改进

关于工厂方法(Factory Method)模式的一点改进

在使用工厂方法模式的时候,发现如果具体产品的种类很多,那么相应的就要写很多的具体工厂子类,这个算是工厂方法的一个缺点吧。今天看了一下GOF的Design Patterns,上面介绍了一种很不错的方法,就是采用模板类,这样就可以有效地解决上面提到的问题。

下面是对上一篇文章《简单工厂模式(Simple Factory) vs 工厂方法模式(Factory Method)》中讲到工厂方法时写的例子的一个改进:

#include <iostream>
 
using namespace std;
 
class Car
{
public:
    virtual void Drive() const = 0;
};
 
class BenzCar : public Car
{
public:
    void Drive() const
    {
        cout << "Drive Benz Car" << endl;
    }
};
 
class BmwCar : public Car
{
public:
    void Drive() const
    {
        cout << "Drive Bmw Car" << endl;
    }
};
 
template <typename CarType>
class CarFactory
{
public:
    static Car * CreateCar()
    {
        return new CarType();
    }
    static void DestroyCar(Car * pCar)
    {
        delete pCar;
    }
};
 
int main()
{
    Car * pCar = CarFactory<BenzCar>::CreateCar();
    pCar->Drive();
    CarFactory<BenzCar>::DestroyCar(pCar);
}

通过上面的例子,我们可以清楚地看到,工厂方法类只有一个,并且能生产各种各样的产品。另外一点,在用具体实现工厂方法类的时候,尽可能采用static方法,或者采用单体模式,因为一般在程序中,工厂只需要一个就可以了。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.