创建型设计模式

工厂方法模式

  • 目标
    • 给每个使用者创建一个适合他们的对象
  • 参与者
    • 两套继承体系
  • 结构
    • 两套体系
    • 一套是被使用对象
    • 一套是使用者(未必是真正的使用者,既Factory,自己不用暴露给外面使用)
      • 使用者需要在接口或者父类把 新建被使用者的方法(newXXX) 抽象,让自己去new
      • 类似于模板方法模式 搞个抽象方法让自类去新建对象
    • 类图:
      image
  • 场景
    • 一个流程/工厂等只需要产出一个对象(都实现了同一接口或者父类)
    • 其实可以理解早期需要使用模板方法的应用场景
    • 晚期可以因为多处逻辑有变动,会导致父类需要多个接口,如果有多个new实例的方法就变成抽象工厂模式了.

抽象工厂模式

  • 目标
    • 给每个使用者创建一套对象
    • 这个典型的创造一套对象的设计模式
  • 参与者
    • 产品体系多套+使用者继承/实现体系一套
  • 结构
    • 产品(包括其具体子类)多套
    • 使用者一套
    • 类图
      image
  • 场景
    • 我一个流程中有多个可能变化的,那么把变化的抽象出去,然后定义几个抽象方法
    • 具体的使用者需要多种产品,然后具体的产品由子类去构造

生成器模式

  • 目标
    • 给客户端创建一个复杂对象,其中创建过程可复用,生成不同对象主要利用不同的生成器返回不同的零件
    • 主要分为两类,创建过程复用和创建过程不复用
    • 这个典型的创建过程太过复杂,为了使创建过程更加清晰明了以及复用创建过程的设计模式
  • 参与者
    • 一个构造参数超多的类
    • 一堆构建者
    • 一个创建过程类(主管类),如果有多个创建流程,可以创建多个方法
      • 可有可无,主要看创建过程是否需要复用
  • 结构
    • 类图
      image
  • 场景
    • 主要针对的是复杂对象/流程逻辑的创建
    • 例如使用了桥接模式的对象的创建
    • 例如有很多参数的对象的创建

原型模式

  • 目标
    使你能够复制已有对象, 而又无需使代码依赖它们所属的类。
  • 参与者
    • 一个克隆接口
    • 需要能复制的类,都去实现接口,方便客户端获得克隆对象
  • 结构
  • 场景
    • 如果你需要复制一些对象, 同时又希望代码独立于这些对象所属的具体类, 可以使用原型模式。
    • 可以配合组合模式和装饰模式,来克隆复杂的对象
    • 基本不用

单例模式

  • 目标
    要求创建一个保证类只有一个实例, 并提供一个访问该实例的全局节点.
  • 参与者
    • 一个类
  • 结构
    • 一个类,提供一个静态的获取实例的方法
  • 场景
    • 全局只需要为一个实例的所有场景
    • 大对象,珍贵资源,稀缺资源等
    • 外观模式就只需要一个实例
    • 享元模式中也需要一个不见的实例
posted @ 2022-06-02 15:28  躲在墙角的  阅读(10)  评论(0编辑  收藏  举报