分享
原 大话设计模式(golang) 六、原型模式
平凡之路 · · 3017 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
模式特点:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
程序实例:从简历原型,生成新的简历,简历类Resume提供Clone()方法。
package main
import (
"fmt"
)
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
}
func main() {
r1 := &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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3017 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
模式特点:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
程序实例:从简历原型,生成新的简历,简历类Resume提供Clone()方法。
package main
import (
"fmt"
)
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
}
func main() {
r1 := &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()
}