当前位置: 首页 > news >正文

世界做火的游戏视频网站广点通

世界做火的游戏视频网站,广点通,网站后台管理系统是什么,网页平台设计四、prototype 原型模式 https://refactoringguru.cn/design-patterns/prototype 如果希望 复制对象, 可使用 “prototype 模式” 如果 “待复制的对象” 是 interface 而不是 class, 或者如果 class 有 private 变量时. 无法知道 "待复制的对象"的细节, 则需要其…

四、prototype 原型模式

https://refactoringguru.cn/design-patterns/prototype

如果希望 复制对象, 可使用 “prototype 模式”

如果 “待复制的对象” 是 interface 而不是 class, 或者如果 class 有 private 变量时. 无法知道 "待复制的对象"的细节, 则需要其实现 “clone()” 方法供外部调用.

4.1 inode

本例希望实现文件系统的复制功能. 数据结构是 inode 接口, file 和 folder 都实现了该接口. 详见 https://refactoringguru.cn/design-patterns/prototype/go/example

当然, 另一条路是: 也可以直接用序列化+反序列化实现复杂对象的 clone()

4.1.1 inode_test

package _41inodeimport "testing"func TestInode(t *testing.T) {d1 := &directory{name:     "json",children: []inode{&file{name: "a.json"}, &file{name: "b.json"}},}d2 := &directory{name:     "yaml",children: []inode{&file{"c.yaml"}, &file{"d.yaml"}},}f1 := &file{name: "e.txt"}f2 := &file{name: "f.sql"}directoryHome := directory{name:     "/home",children: []inode{d1, d2, f1, f2},}directoryHome.print(printIndent)cp := directoryHome.clone()cp.print("  ")
}// code result
=== RUN   TestInode/homejsona.jsonb.jsonyamlc.yamld.yamle.txtf.sql/home_clonejson_clonea.json_cloneb.json_cloneyaml_clonec.yaml_cloned.yaml_clonee.txt_clonef.sql_clone
--- PASS: TestInode (0.00s)
PASS

4.1.2 inode

package _41inode// inode 是文件系统的节点
type inode interface {// 打印此节点的信息, indent 是缩进符(如\t)print(indent string)// 复制此节点clone() inode
}const printIndent = "  "

4.1.3 file

package _41inodeimport "fmt"type file struct {// 文件名name string
}func (f *file) print(indent string) {str := indent + f.namefmt.Println(str)
}func (f *file) clone() inode {return &file{name: f.name + "_clone"}
}

4.1.4 directory

package _41inodeimport ("fmt"
)type directory struct {// 目录名name string// 子节点children []inode
}func (d *directory) print(indent string) {fmt.Println(indent + d.name)for _, child := range d.children {child.print(indent + printIndent) // 在基础 indent 的基础上, 再添加 printIndent}
}func (d *directory) clone() inode {children := make([]inode, 0)for _, child := range d.children {children = append(children, child.clone())}cp := &directory{name:     d.name + "_clone",children: children,}return cp
}

http://www.tj-hxxt.cn/news/64779.html

相关文章:

  • 智能建站系统开发设计一个公司网站多少钱
  • wordpress+微官网主题seo教学平台
  • 国外设计作品网站关键词优化报价
  • 游戏公司官方网站建设方案seo值是什么意思
  • 网站建设服务合同协议地推拉新app推广接单平台
  • 下载什么软件可以做动漫视频网站淘词神器
  • 禅城网站建设公司推广效果最好的平台
  • 与人妖做视频网站安卓优化神器
  • php网站开发参考书籍广州各区最新动态
  • 2 网站内部链接优化搜索引擎seo关键词优化效果
  • wordpress作者优化关键词首页排行榜
  • 青岛网站建设运营网络舆情监测系统软件
  • 大人小孩做网站南京搜索引擎推广优化
  • seo站内优化和站外优化seo优化总结
  • l临沂互助系统网站开发b2b和b2c是什么意思
  • 做个网站多少钱 百度能查到的中国十大it培训机构排名
  • 合肥哪家制作网站百度推广怎么推广
  • 上海公安人口管理网站最新新闻事件摘抄
  • 住房新建网站央视新闻最新消息今天
  • 做网站需要了解哪些知识怎样做好网络推广呀
  • 什么是php动态网站开发网络推广是干嘛的
  • 一级做A网站潍坊seo排名
  • 网站后台不显示验证码网站关键词排名快速提升
  • o2o平台信息安新seo优化排名网站
  • 福州专业网站制作的公司百度咨询
  • 呼和浩特网站建设公司网站怎么推广
  • 有哪些做分析图用的网站百度认证怎么认证
  • 互联网创业就是做网站吗优化网站软文
  • 营销型网站建设项目需求表如何优化seo技巧
  • 网站报价预算书海外社交媒体营销