package main
import "fmt"
// 原型对象需要实现的接口
// copy 原有的对象
type Cloneable interface {
Clone() Cloneable
}
// 原型的类
type PrototypeManager struct {
prototypes map[string]Cloneable
}
// 构造初始化
func NewPrototypeManager() *PrototypeManager {
return &PrototypeManager{make(map[string]Cloneable)}
}
// 抓取
func (p *PrototypeManager) Get(name string) Cloneable {
return p.prototypes[name]
}
// 设置
func (p *PrototypeManager) Set(name string, cloneable Cloneable) {
p.prototypes[name] = cloneable
}
type Type1 struct {
name string
}
func (t *Type1) Clone() Cloneable {
//tc := *t
//return &tc // 深复制
return t // 浅复制
}
type Type2 struct {
name string
}
func (t *Type2) Clone() Cloneable {
tc := *t // 开辟内存新建变量,存储指针指向的内容
return &tc // 返回地址
}
func main() {
mgr := NewPrototypeManager()
t1 := &Type1{name: "type1"}
mgr.Set("t1", t1)
t11 := mgr.Get("t1")
fmt.Println(t11)
t22 := t11.Clone() // 复制
if t11 == t22 {
fmt.Println("浅复制")
} else {
fmt.Println("深复制")
}
}