• 设计模式------工厂模式的学习


    一、什么是工厂模式

    工厂模式将目的将创建对象的具体过程屏蔽隔离起来,从而达到更高的灵活性,工厂模式可以分为三类:

    • 简单工厂模式(Simple Factory)
    • 工厂方法模式(Factory Method)
    • 抽象工厂模式(Abstract Factory)

    通过一个案例来对工厂模式进行一个简单初步的理解
    (1)在没有工厂的时代,如果客户需要一款宝马车,那么就需要客户去创建一款宝马车,然后拿来用。
    (2)简单工厂模式:后来出现了工厂,用户不再需要去创建宝马车,由工厂进行创建,想要什么车,直接通过工厂创建就可以了。比如想要320i系列车,工厂就创建这个系列的车。
    (3)工厂方法模式:为了满足客户,宝马车系列越来越多,如320i、523i等等系列,一个工厂无法创建所有的宝马系列,于是又单独分出来多个具体的工厂,每个具体工厂创建一种系列,即具体工厂类只能创建一个具体产品。但是宝马工厂还是个抽象,你需要指定某个具体的工厂才能生产车出来。
    (4)抽象工厂模式:随着客户要求越来越高,宝马车必须配置空调,于是这个工厂开始生产宝马车和需要的空调。最终是客户只要对宝马的销售员说:我要523i空调车,销售员就直接给他523i空调车了。而不用自己去创建523i空调车宝马车。

    工厂模式的目的:将创建对象的具体过程屏蔽隔离起来

    二、简单工厂模式:

    定义一个创建对象的工厂接口,将对象的创建和本身的业务逻辑分离,用户要买宝马只需要告诉工厂宝马的型号即可,
    优点:
    客户端不需知道所创建的具体产品类的类名以及创建过程,只需知道具体产品类所对应的参数即可(哪个型号)
    缺点:
    每次添加新产品就需要修改工厂类。在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展维护,
    并且工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

    三、工厂方法模式:

    于简单工厂模式不同在于,在简单工厂的基础上,给工厂类新加了一个接口,用户要买宝马只需要告诉工厂接口,是哪个工厂即可
    优点:
    每增加新产品,只需增加该产品以及对应的具体实现工厂类,由具体工厂类决定要实例化的产品是哪个,
    将对象的创建与实例化延迟到子类,这样工厂的设计就符合“开闭原则”了,扩展时不必去修改原来的代码。
    在使用时,用户只需知道产品对应的具体工厂,无需具体的创建过程,甚至不需要知道具体产品类的类名,
    当我们选择哪个具体工厂时,就已经决定了实际创建的产品是哪个了。
    缺点:
    每增加一个产品都需要增加一个具体产品类和实现工厂类,使得系统中类的个数成倍增加,
    在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

    四、抽象工厂模式:

    在工厂方法模式中,我们使用一个工厂创建一个产品,一个具体工厂对应一个具体产品,
    但有时候我们需要一个工厂能够提供多个产品对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式。
    比如:汽车并不是由一个汽车工厂造出来的,而是由多个工厂,如发动机工厂,空调工厂等等共同造出来的
    所以:抽象工厂就是在工厂方法的基础上,将一个工厂接口,变成了多个工厂接口,并提供一个抽象接口给来工厂接口去继承
    优点:
    用户不需要明确指定具体生成类;所有的具体工厂都实现了抽象工厂中定义的公共接口,
    因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。
    缺点:
    但该模式的缺点在于添加新的行为时比较麻烦,如果需要添加一个新工厂对象时(沙发工厂),
    需要更改接口及其下所有子类,这必然会带来很大的麻烦。

    五、工厂方法模式与抽象工厂模式的区别在于:

    (1)工厂方法只有一个抽象产品类和一个抽象工厂类,但可以派生出多个具体产品类和具体工厂类,每个具体工厂类只能创建一个具体产品类的实例。
    (2)抽象工厂模式拥有多个抽象产品类(产品族)和一个抽象工厂类,每个抽象产品类可以派生出多个具体产品类;抽象工厂类也可以派生出多个具体工厂类,同时每个具体工厂类可以创建多个具体产品类的实例

  • 相关阅读:
    EDI 许可证申请对网站有哪些要求?
    【详细教程】Kafka应用场景、基础组件、架构探索
    .Net8的AOT引导程序BootStrap
    TINA9仿真那些事
    快速上手Linux核心命令(四):文件内容相关命令
    Linux开发环境搭建
    在2024年WWDC大会上,苹果宣布了其全新的“Apple Intelligence”AI功能以及ISO18功能
    Hadoop学习---9、Yarn
    linux常用命令
    怎么用光碟重装系统
  • 原文地址:https://blog.csdn.net/qq_44818449/article/details/125935633