1 定义
原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
UML类图:

原型模式包含以下三个角色:
- Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。
- ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象
- Client(客户类):让一个原型对象克隆自身从而创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类,系统具有较好的可扩展性,增加或更换具体原型类都很方便。
2 go语言实现
2.1 实现Prototype以及ConcretePrototype
type PersonalInfo struct {
name string
sex string
age string
}
type WorkExperience struct {
timeArea string
company string
}
type Resume struct {
PersonalInfo
WorkExperience
}
func (this *Resume) SetPersonalInfo(name string, sex string, age string) {
this.name = name
this.sex = sex
this.age = age
}
func (this *Resume) SetWorkExperience(timeArea string, company string) {
this.timeArea = timeArea
this.company = company
}
func (this *Resume) Display() {
fmt.Println(this.name, this.sex, this.age)
fmt.Println("工作经历:", this.timeArea, this.company)
}
func (this *Resume) Clone() *Resume {
resume := *this
return &resume
}
2.2 客户端调用
func main() {
r1 := &prototype.Resume{}
r1.SetPersonalInfo("大鸟", "男", "29")
r1.SetWorkExperience("1998-2000", "xx公司")
r2 := r1.Clone()
r2.SetWorkExperience("2001-2006", "yy公司")
r3 := r1.Clone()
r3.SetPersonalInfo("大鸟", "男", "24")
r1.Display()
r2.Display()
r3.Display()
}

本文介绍了设计模式中的原型模式,定义了一个用于创建对象的接口,通过拷贝原型来创建新的对象。在Go语言中,通过实现Prototype和ConcretePrototype来实现这一模式,并详细阐述了客户端如何调用克隆方法创建新对象。

被折叠的 条评论
为什么被折叠?



