原型模式(Prototype)也称为克隆模式,是一种创建型设计模式,使你能够复制已有对象,而又无需使代码依赖它们所属的类。
问题
如果你希望生成一个对象,其与另一个对象完全相同,该如何实现呢?
如果遍历对象的所有成员,将其依次复制到新对象中,会稍显麻烦,而且有些对象可能会有私有成员变量遗漏。
原型模式将这个克隆的过程委派给了被克隆的实际对象,被克隆的对象就叫做“原型”。
解决
如果需要克隆一个新的对象,这个对象完全独立于它的原型,那么就可以使用原型模式。
原型模式的实现非常简单,请看以下代码:
package main
import "fmt"
type Type1 struct {
name string
}
func (t *Type1) Clone() *Type1 {
tc := *t
return &tc
}
func main() {
t1 := &Type1{"type1"}
fmt.Println(t1, &t1)
t2 := t1.Clone()
fmt.Println(t2, &t2)
}
运行示例,输出:
&{type1} 0xc000012028
&{type1} 0xc000012038
参考文章: