本系列笔记总结23种设计模式在GO语言中的实现方法,参考了refactoringguru.cn/design-patt… 网站的内容,也包括我自己的理解。如果有理解不对的地方,恳请批评指正。
创造型设计模式
在创造型模式总结(一)中已经总结了工厂模式和抽象工厂模式,这里将继续原型模式、单例模式和生成器模式的总结。
单例模式
相比于其他四种模式,单例模式可能是最好理解的创建型模式了。
我们常常会遇到一种需求,希望某个类只有一个实例对象,全局都共享使用这个变量,这就要用到单例模式了。
我们可以在组织代码时封装类的创建方法,先判断是否已经创建实例,如果没有则创建、保存并返回实例,如果已经创建了则直接返回保存的实例。
设计模式之间并不是互斥的,它们可以相互配合使用。
比如在用抽象工厂模式创建工厂时,我们就可以采用单例模式,每种类型的工厂只需要一个工厂实例即可。
单例模式可以减少创建实例的开销,也可以提供全局共享的变量。
原型模式
假如参数中传入一个interfer{}变量,并且这个变量的数据结构可能很复杂,而你又需要克隆一个内容一模一样但地址不同的全新实例,这时候就需要用到原型模式了。
如果我们在需要克隆实例的地方先判断变量的类型,再通过循环或递归等方式克隆对象,创建对象的过程可能就占据了这个方法的大部分空间。
原型模式要求类型实现一个clone()方法,这样即使不确定变量的类型,也可以直接调用clone()方法返回一个相同的对象。
工厂模式留在下一次写。如果有理解不对的地方,欢迎批评指正!