设计模式 创建型模式

275 阅读2分钟

这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战

用于创建对象

工厂模式

  • 通过调用方传入的参数进行获取相同接口不同实现类
  • 调用方不知道内部实现类的创建逻辑,只需要创建好的对象就可以了

抽象工厂模式

是工厂模式的扩展版,唯一的不同的其创建的对象是工厂,也就是说抽象工厂是其他工厂的爸爸

  • 需要注意的是,抽象工厂创建的工厂,都是用于创建同一个抽象的实现的工厂

感觉并不是经常使用

单例模式

当需要某个对象是全局使用,并且只需要初始化一次的,可以使用单例模式

  • 该全局变量是私有且 static 的
  • 通过一个方法(类)(下文成为creator)获取该全局变量

有两种时机进行该全局变量的初始化(实现方式也取决于具体语言特性)

  • lazy load,在该creator被调用的时候进行检测,全局变量是否完成初始化
    • 有初始化,直接返回
    • 无初始化,初始化后返回
      • 需要加锁避免并发情况下多次初始化全局变量(在go中,直接用once就好了)
  • 饿汉模式,在程序开始运行的时候就进行初始化,后续调用creator直接返回创建好的实例即可

建造者模式

感觉和工厂模式有点像,只不过相比工厂模式针对不同条件创建不同的实现,更强调的的是建造者可以调用入参的接口方法,组织传入实现了对应接口的对象,返回有目标功能的建造后的对象

原型模式

用于创建重复的对象时,又需要保证创建的性能

  • 实际上就是实现了一个原型接口,用于创建当前对象的克隆,避免直接调用创建函数带来的性能消耗
    • 例如在创建该对象的时候需要进行数据库(或其他高消耗操作),可以调用克隆函数,避免该操作
    • 例如gorm的db使用