这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战
用于创建对象
工厂模式
- 通过调用方传入的参数进行获取相同接口的不同实现类
- 调用方不知道内部实现类的创建逻辑,只需要创建好的对象就可以了
抽象工厂模式
是工厂模式的扩展版,唯一的不同的其创建的对象是工厂,也就是说抽象工厂是其他工厂的爸爸
- 需要注意的是,抽象工厂创建的工厂,都是用于创建同一个抽象的实现的工厂
感觉并不是经常使用
单例模式
当需要某个对象是全局使用,并且只需要初始化一次的,可以使用单例模式
- 该全局变量是私有且 static 的
- 通过一个方法(类)(下文成为creator)获取该全局变量
有两种时机进行该全局变量的初始化(实现方式也取决于具体语言特性)
- lazy load,在该creator被调用的时候进行检测,全局变量是否完成初始化
-
- 有初始化,直接返回
- 无初始化,初始化后返回
-
- 需要加锁避免并发情况下多次初始化全局变量(在go中,直接用once就好了)
- 饿汉模式,在程序开始运行的时候就进行初始化,后续调用creator直接返回创建好的实例即可
建造者模式
感觉和工厂模式有点像,只不过相比工厂模式针对不同条件创建不同的实现,更强调的的是建造者可以调用入参的接口方法,组织传入实现了对应接口的对象,返回有目标功能的建造后的对象
原型模式
用于创建重复的对象时,又需要保证创建的性能
- 实际上就是实现了一个原型接口,用于创建当前对象的克隆,避免直接调用创建函数带来的性能消耗
-
- 例如在创建该对象的时候需要进行数据库(或其他高消耗操作),可以调用克隆函数,避免该操作
- 例如gorm的db使用