C++设计模式(二) GeekBand

“对象创建”模式
通过“对象创建”模式绕开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的对象了。

  • Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。
  • Factory Method模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。
  • Factory Method模式解决“单个对象”的需求变化。缺点在于要求创建方法/参数相同。
抽象工厂(Abstract Factory)

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

抽象工厂(Abstract Factory)

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

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

AbstractProductB* CreateProductB()
{
      return new ProductB1();
}
  • 如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单的工厂完全可以。
  • “系列对象”指的是在某一特定系列下的对象之间有相互依赖或作用的关系。不同系类的对象之间不能相互依赖。
  • Abstract Factory模式主要在与应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
总结

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 9,390评论 1 15
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    RamboLI阅读 4,121评论 0 1
  • 一个UML类图 类之间的关系 类的继承结构表现在UML中为:泛化(generalize)与实现(realize) ...
    僚机KK阅读 3,890评论 0 0
  • 简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建...
    justCode_阅读 4,949评论 1 9
  • 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者...
    lichengjin阅读 4,410评论 0 8

友情链接更多精彩内容