C++设计模式(二) GeekBand

2016-07-19  本文已影响0人  CharlesW

“对象创建”模式
通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。其中包括工厂方法(Factory Method),抽象工厂(Abstract Factory),原型模式(Prototype),建造者模式(Builder)。

工厂模式(Factory)

工厂方法(Factory Method)

模式定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。

工厂方法(Factory Method)

工厂提供FactoryMethod()的虚接口,在ConcreteCreator中实现,这里假定有个ConcreteCreator,只生产ConcreteProduct产品。
以ConcreteCreator为例,代码框架如下:

class ConcreteCreator: public Factory
{
    virtual Product* CreateProduct()
    {
        return new ConcreteProduct();
    }
};

在客户端用 Factory *f ; f->CreateProduct();就可以得到ConcreteProduct的对象了。

抽象工厂(Abstract Factory)

模式定义
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。

抽象工厂(Abstract Factory)

抽象工厂又是工厂方法的升级版,但本质是相同的。由图可以看到不同的地方在于多了一个抽象产品的类。
ConcreateFactory1只生产ProductA1和ProductB1,即下标带“1”的产品。在ConcreteFactory1中的两个方法应该如下:

AbstractProductA* CreateProductA()
{
      return new ProductA1();
}

AbstractProductB* CreateProductB()
{
      return new ProductB1();
}
总结

工厂方法
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别
工厂方法只有一个抽象产品类,而抽象工厂有多个。
工厂方法的具体工厂类只能创建一个具体产品类的实例,而抽象工厂可以创建多个。

上一篇 下一篇

猜你喜欢

热点阅读