03简单工厂-工厂-抽象工厂

创建型模式

  • 定义:关注对象的创建过程创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离,对用户隐藏了类的实例的创建细节

  • 关注点

    1. 创建什么(What)
    2. 由谁创建(Who)
    3. 何时创建(When)
  • 概述
    Pasted image 20230306091312

模式

简单工厂模式

  • 简单结构:3个角色

    1. Factory(工厂角色)
    2. Product(抽象产品角色)
    3. ConcreteProduct(具体产品角色)
  • UML图
    Pasted image 20230306091816

工厂方法模式

  • 简单结构:4个角色

    1. Product(抽象产品)
    2. ConcreteProduct(具体产品)
    3. Factory(抽象工厂)
    4. ConcreteFactory(具体工厂)
  • UML图
    Pasted image 20230306092312

注意:想要实现开闭原则还需要使用[[反射机制]];spring提供了实现了方法,通过配置文件就可以实现

  • 优缺点

    1. 优点:
      • 工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节
      • 能够让工厂自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
      • 在系统中加入新产品时,完全符合开闭原则
    2. 缺点:
      • 系统中类的个数将成对增加,在一定程度上增加了系统的复杂度,会给系统带来一些额外的开销
      • 增加了系统的抽象性和理解难度
  • 适用环境

    1. 客户端不知道它所需要的对象的类(客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体产品对象由具体工厂类创建)
    2. 抽象工厂类通过其子类来指定创建哪个对象

抽象工厂模式

  • 定义

    • 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
    • 又称为工具(Kit)模式,它是一种对象创建型模式
    • 抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品
    • 当一个工厂等级结构可以创建出一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率
  • 简单结构:4个角色

    1. AbstractFactory(抽象工厂)
    2. ConcreteFactory(具体工厂)
    3. AbstractProduct(抽象产品)
    4. ConcreteProduct(具体产品)
  • UML图
    Pasted image 20230306095435

注意:此时在现有的工厂内添加新的产品,就不符合开闭原则

  • 优缺点

    1. 优点:

      • 隔离了具体类的生成
      • 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象
      • 增加新的产品族很方便,符合开闭原则
    2. 缺点:

      • 增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了开闭原则
  • 适用环境

    1. 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节
    2. 系统中有多于一个的产品族,但每次只使用其中某一产品族
    3. 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来
    4. 产品等级结构稳定
posted @ 2023-04-24 21:12  vbig  阅读(22)  评论(0)    收藏  举报

Loading