美文网首页
C++工厂模式

C++工厂模式

作者: 九楼记 | 来源:发表于2022-06-07 23:26 被阅读0次

什么是工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

简单来说,使用了C++多态的特性,将存在继承关系的类,通过一个工厂类创建对应的子类(派生类)对象。

工厂模式的实现方式可分别简单工厂模式、工厂方法模式、抽象工厂模式,每个实现方式都存在优和劣。

简单工厂模式

我超级不喜欢写例子。。。
只有在看不懂,不容易理解的情况下,才会去写例子

结构组成:
工厂类:工厂模式的核心类,会定义一个用于创建指定的具体实例对象的接口。
抽象产品类:是具体产品类的继承的父类或实现的接口。
具体产品类:工厂类所创建的对象就是此具体产品实例。

有3个子类1,子类2,子类3,分别有创建对象的方法
在简单工厂类中,根据子类的类型,分别去调用不同的子类的创建对象方法

优点:结构简单,管理方式简单
缺点:扩展性非常差,新增产品的时候,需要去修改工厂类。

工厂方法模式

和简单工厂模式中工厂负责生产所有产品相比,工厂方法模式将生成具体产品的任务分发给具体的产品工厂。

结构组成:
抽象工厂类厂:工厂方法模式的核心类,提供创建具体产品的接口,由具体工厂类实现。
具体工厂类:继承于抽象工厂,实现创建对应具体产品对象的方式。
抽象产品类:它是具体产品继承的父类(基类)。
具体产品类:具体工厂所创建的对象,就是此类。

工厂方法模式的特点:
工厂方法模式抽象出了工厂类,提供创建具体产品的接口,交由子类去实现。
工厂方法模式的应用并不只是为了封装具体产品对象的创建,而是要把具体产品对象的创建放到具体工厂类实现。

工厂方法的缺点:
每新增一个产品,就需要增加一个对应的产品的具体工厂类。相比简单工厂模式而言,工厂方法模式需要更多的类定义。
一条生产线只能一个产品。

抽象工厂模式

上面两种模式不管工厂怎么拆分抽象,都只是针对一类产品,如果需要多种产品,那就需要使用抽象工厂模式。抽象工厂模式通过在AbstarctFactory中增加创建产品的接口,并在具体子工厂中实现新加产品的创建,当然前提是子工厂支持生产该产品。

顾名思义,抽象工厂,这个工厂是抽象的。

结构组成(和工厂方法模式一样):
抽象工厂类厂(ShoesFactory):工厂方法模式的核心类,提供创建具体产品的接口,由具体工厂类实现。
具体工厂类(NiKeProducer):继承于抽象工厂,实现创建对应具体产品对象的方式。
抽象产品类(Shoes\Clothe):它是具体产品继承的父类(基类)。
具体产品类(NiKeShoes\NiKeClothe):具体工厂所创建的对象,就是此类。

优点与不足:
优点: 提供一个接口,可以创建多个产品族中的产品对象,同一类的多个产品对象不需要创建多个工厂。

缺点: 相比简单工厂模式而言,抽象工厂模式需要更多的类定义。

Reference

[1] https://zhuanlan.zhihu.com/p/83535678
[2] https://www.guyuehome.com/37108

相关文章

  • C++ 常见设计模式

    C++ 常见设计模式包括: 工厂模式 简单工厂模式定义工厂创建类,抽象产品,派生产品类 工厂方法模式 抽象工厂模式...

  • C++设计模式-第二篇 (Boolan)

    C++设计模式-第二篇 (Boolan) 本章内容:1 工厂方法模式2 抽象工厂模式3 原型模式4 构建器模式5 ...

  • 工厂模式C++

    用一个单独的类来做创造实例的过程,就是工厂。 简单工厂模式 简单工厂模式基本代码 简单运算工厂 面向对象的编程,并...

  • C++工厂模式

    什么是工厂模式 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不...

  • C++设计模式 ==> 工厂模式

    简介 在之前,笔者曾简单介绍过简单工厂模式,我们说过简单工厂模式可以使用工厂类根据需求动态生成子类对象,从而方便了...

  • c++抽象工厂模式

    1.抽象工厂模式简介    抽象工厂是工厂方法的升级版,为相关或者相互依赖的对象提供一个接口,而且无效指定他们的具...

  • 常用设计模式

    设计模式 工厂模式 工厂模式思路上分:简单工厂模式,工厂模式, 抽象工厂模式// 抽象工厂模式可以代替工厂模式,做...

  • C++设计模式 ==> 简单工厂模式

    简述 简单工厂模式的核心在于使用一个工厂类根据需求动态生成子类对象。以计算器程序作为例子,加减乘除都分别作为运算类...

  • 【C++设计模式】简单工厂模式

  • 【C++设计模式】抽象工厂模式

网友评论

      本文标题:C++工厂模式

      本文链接:https://www.haomeiwen.com/subject/qngemrtx.html