6.2.2.2. 创新型模式之工厂方法模式

工厂方法模式(Factory Method Pattern)是一种常用的对象创建型设计模式,此模式的核心思想是封装类中不变的部分,提取其中个性化善变的部分为独立类, 通过依赖注入以达到解耦,复用以及方便后期维护拓展的目的.

6.2.2.2.1. 模式结构

../../../_images/factory_struct.png
  • Factory(抽象工厂): 是工厂方法模式的核心,与应用程序无关.任何在模式中创建的对象的工厂类必须实现这个接口

  • ConcreteFactory(具体工厂): 实现抽象工厂接口的具体工厂类, 包含与应用程序密切相关的逻辑,并且被应用程序调用以创建产品对象

  • Product(抽象产品): 所创建对象的基类,也就是具体产品的共同父类或共同拥有的接口

  • ConcreteProduct(具体产品): 实现来抽象产品角色所定义的接口.某具体产品有专门的具体工厂创建,他们之间往往一一对应

6.2.2.2.2. 优缺点

  • 优点: 克服了简单工厂模式违背开放-封闭原则的缺点,又保留了封装对象创建过程的优点,降低客户端和工厂的耦合性.所以说,”工厂方法模式”是”简单 工厂模式”的进一步抽象和推广

  • 缺点: 每增加一个产品,相应的也要增加一个子工厂,加大了额外的开发量

6.2.2.2.3. 代码实现

  • 创建抽象产品

在此示例中,创建一个汽车产品

class ICar
{
public:
    virtual string Name() = 0;  //汽车名称
}
  • 创建具体产品

class BenzCar : public ICar
{
public:
    string Name() {
        return "Benz Car";
    }
}

class BmwCar : public ICar
{
public:
    string Name() {
        return "Bmw Car";
    }
}
  • 创建工厂

class AFactory
{
public:
    virtual ICar* CreateCar() = 0; //生产汽车
}
  • 创建具体工厂

class BenzFactory : public AFactory
{
public:
    ICar* CreateCar() {
        return new BenzCar();
    }
}

class BmwFactory : public AFactory
{
public:
    ICar* CreateCar() {
        return new BmwCar();
    }
}