首页 > 其他 > 详细

工厂模式(factory pattern)

时间:2015-08-18 21:13:12      阅读:179      评论:0      收藏:0      [点我收藏+]

    工厂模式主要用来封装对象的创建,有3种分类:简单工厂(simple factory)、工厂方法(factory method)、抽象工厂(abstract factory)。

简单工厂包括3种组成元素:抽象产品、具体产品、具体工厂(简单工厂),结构图如下:

技术分享

C++实现:

//抽象产品
class Car {
public:
    virtual string getDescription() = 0;
};
//具体产品
class Audi : public Car {
    string getDescription() { return "Audi"; }
};

class BMW : public Car {
    string getDescription() { return "BMW"; }
};

class Ford : public Car {
    string getDescription() { return "Ford"; }
};

class Hummer : public Car {
    string getDescription() { return "Hummer"; }
};

class Toyota : public Car {
    string getDescription() { return "Toyota"; }
};

class Bentley : public Car {
    string getDescription() { return "Bentley"; }
};
//简单工厂
class CarFactory {
public:
    static Car* createCar(string name) {
        if (name == "Audi")
            return new Audi;
        else if (name == "BMW")
            return new BMW;
        else if (name == "Ford")
            return new Ford;
        else if (name == "Hummer")
            return new Hummer;
        else if (name == "Toyota")
            return new Toyota;
        else if (name == "Bentley")
            return new Bentley;
    }
};

int main()
{
    Car *mycar = CarFactory::createCar("Audi");
    cout << mycar->getDescription() << endl;
    mycar = CarFactory::createCar("BMW");
    cout << mycar->getDescription() << endl;
    delete mycar;
}

    可以看出,在简单工厂模式下,一个具体的工厂负责所有具体产品的创建,适用于产品种类较少的情况。当新增产品时,我们需要修改简单工厂的实现逻辑,违背了开放关闭原则。

 

工厂方法模式在简单工厂模式基础上,增加了一个抽象工厂。

技术分享

抽象工厂只定义了创建对象的接口,由具体子类负责具体对象的创建。

C++实现:

//抽象工厂
class CarFactory {
public:
    virtual Car* createCar() = 0;
};
//具体工厂
class AutiCarFactory : public CarFactory {
public:
    Car* createCar() { return new Audi; }
};

class BMWCarFactory : public CarFactory {
public:
    Car* createCar() { return new BMW; }
};

int main()
{
    CarFactory *pcf = new AutiCarFactory;
    Car *c = pcf->createCar();
    cout << c->getDescription() << endl;
    delete pcf;

    pcf = new BMWCarFactory;
    c = pcf->createCar();
    cout << c->getDescription() << endl;
    delete pcf;
}

在工厂方法模式下,当新增一个产品种类时,只需要创建一个新的产品类和一个新的对应工厂类即可,没有破坏原有代码,遵循了开放关闭原则。

工厂模式(factory pattern)

原文:http://www.cnblogs.com/gattaca/p/4740541.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!