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

《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype)

文章目录

  • 1. 概念
    • 1.1 简述
    • 1.2 角色
    • 1.3 类图
  • 2. 代码示例
    • 2.1 设计
    • 2.2 代码
    • 2.3 类图

1. 概念

1.1 简述

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

1.2 角色

  • Prototype(抽象原型类):它是声明克隆方法的接口,或所有具体原型类的公共父类

它可以是抽象类也可以是接口,甚至还可以是具体实现类。

  • ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
  • Client(客户类):

让一个原型对象克隆自身从而创建一个新的对象,只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。

1.3 类图

Client
Prototype
+Clone() : Prototype
ConcretePrototype
+Clone() : Prototype

2. 代码示例

2.1 设计

  • 创建一个将军
    • 它有4个方法:设置人员信息设置装备查询克隆
  • 调用
    • 实例化一个将军关羽
    • 关羽克隆方法实例化继承人
    • 继承人设置人员信息方法修改继承人的信息

2.2 代码

package mainimport "fmt"// 定义抽象原型
type Prototype interface {Clone() Prototype
}
//定义具体原型
type ConcretePrototype struct {Name   stringModelA stringModelB string
}func (c *ConcretePrototype) Clone() Prototype {pN := &ConcretePrototype{Name:   c.Name,ModelA: c.ModelA,ModelB: c.ModelB,}return pN
}func main() {//实例化一个原型prototype := &ConcretePrototype{Name:   "liubei",ModelA: "AAA",ModelB: "BBB",}//用原型复制两个实例cloneA := prototype.Clone()cloneB := prototype.Clone()//查看结果fmt.Println(cloneA, cloneB)
}

2.3 类图

Client
Prototype
+Clone() : Prototype
ConcretePrototype
+String Name
+String ModelA
+String ModelB
+Clone() : Prototype

在这里插入图片描述

http://www.lryc.cn/news/97552.html

相关文章:

  • SpringCloudAlibaba微服务实战系列(一)Nacos服务注册发现
  • 23.7.27 牛客暑期多校4部分题解
  • Ubuntu 20.04 安装教程
  • 如何评判算法好坏?复杂度深度解析
  • 【HashMap】2352. 相等行列对
  • 如何声明静态方法 和 实现?
  • 哈工大计算机网络课程局域网详解之:无线局域网
  • 系统集成|第六章(笔记)
  • MySQL主从复制环境部署
  • day42-servlet下拉查询/单例模式
  • docker中设置容器健康检查
  • azure-cognitiveservices-speech api error while using with AWS Lambda
  • 系统集成项目管理工程师挣值分析笔记大全
  • TCP 协议【传输层协议】
  • Golang 中的 time 包详解(二):time.Duration
  • Linux 学习记录58(ARM篇)
  • 【一文搞懂】—带霍尔编码器的直流有刷减速电机
  • 滴水逆向三期笔记与作业——02C语言——05 正向基础/05 循环语句
  • Python抓取分享页面的源代码示例
  • linux安装nginx遇到的报错
  • 一起学SF框架系列5.8-spring-Beans-Bean注解解析3-解析配置component-scan
  • 【LeetCode热题100】打卡第42天:滑动窗口最大值搜索二维矩阵II
  • [uni-app] 微信小程序 - 组件找不到/导入报错 (分包问题导致)
  • 从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
  • 编程小白的自学笔记十二(python爬虫入门四Selenium的使用实例二)
  • 技术笔记2023076 rBoot学习7
  • 收藏这6个抠图工具,一键抠图不用愁!
  • 四,Eureka 第四章
  • k8s常见的资源对象使用
  • JavaScript 简单实现观察者模式和发布订阅模式