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

这篇具有很好参考价值的文章主要介绍了《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 概念

1.1 简述

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

1.2 角色

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

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

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

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

1.3 类图

2. 代码示例

2.1 设计

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

2.2 代码

package main

import "fmt"

// 定义抽象原型
type Prototype interface {
	Clone() Prototype
}
//定义具体原型
type ConcretePrototype struct {
	Name   string
	ModelA string
	ModelB 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 类图


《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype),架构设计,golang,设计模式,原型模式,Prototype,创建型模式,架构文章来源地址https://www.toymoban.com/news/detail-619901.html

到了这里,关于《golang设计模式》第一部分·创建型模式-02-原型模式(Prototype)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 第一部分:核心容器

    第一部分:核心容器

    Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!         什么是IoC、IoC容器、bean、DI ? IoC:对象创建控制权由程序转移到IoC容器的控制反转思想。 IoC容器:创建管理对象的容器。 bean:IoC容器中被创建管理的对象。 DI:IoC容器中建立bean之间依赖关

    2024年02月13日
    浏览(11)
  • 模拟第一部分5

    1、如果想要在外部包中使用全局变量,则全局变量必须( ) 正确答案:A A、首字母必须大写 B、首字母必须小写 C、必须加上const D、必须加上var 答案解析:在函数体外声明的变量称之为全局变量。全局变量声明必须以 var 开头,如果想要在外部包中使用

    2024年02月08日
    浏览(13)
  • 6.播放音频(第一部分)

    这一章将对播放音频的具体内容做讲解。我的想法是按照tinyalsa中的例子作为讲解的范本,因为tinyalsa足够简单,很多时候都忽略了它的细节。趁着这个机会再整理一下tinyalsa的内容。我使用的tinyalsa从https://github.com/tinyalsa/tinyalsa下载,从examples/writei.c开始。 其中函数read_file从

    2023年04月08日
    浏览(8)
  • MySQL学习-第一部分

    MySQL数据库 MySQL是一个**关系型数据库管理系统****,**由瑞典[MySQL AB](https://baike.baidu.com/item/MySQL AB/2620844) 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用

    2024年02月15日
    浏览(15)
  • 第一部分:Spark基础篇

    第一部分:Spark基础篇

    第一部分:Spark基础篇_奔跑者-辉的博客-CSDN博客 第二部分:Spark进阶篇_奔跑者-辉的博客-CSDN博客 第三部分:Spark调优篇_奔跑者-辉的博客-CSDN博客 第一部分:Flink基础篇_奔跑者-辉的博客-CSDN博客 (*建议收藏*) 实时数仓之 Kappa 架构与 Lambda 架构_奔跑者-辉的博客-CSDN博客(*建议收

    2024年02月05日
    浏览(15)
  • 第一部分-基础篇-第一章:PSTN与VOIP(下篇)

    第一部分-基础篇-第一章:PSTN与VOIP(下篇)

      学习资料来源《FreeSWITCH权威指南》-作者杜金房这本书。我是2022年6月毕业的,偶然的机会接触到FreeSWITCH,但是目前在南京从事java后端开发,FreeSWITCH纯属个人爱好,进行笔记整理。也一直希望有机会可以参与FreeSWITCH相关工作开发,如有需要,请联系我18956043585,先说声谢

    2024年02月06日
    浏览(14)
  • HTML学习 第一部分(前端学习)

    HTML学习 第一部分(前端学习)

    参考学习网站: 网页简介 (w3schools.com) 我的学习思路是:网站+实践+视频。 视频很重要的,因为它会给你一种开阔思路的方式。你会想,噢!原来还可以这样。这是书本或者网站教程 所不能教给你的。而且,对一些教程,它的用法你可能 在工作或者以后都用不上,这种情况下

    2024年02月15日
    浏览(13)
  • Mysql入门基础教程(第一部分)

    MySQL基础教程解释了一些基本的SQL语句。如果这是您第一次使用关系数据库管理系统,本教程将为您提供使用MySQL数据库服务器所需的一切,例如查询数据,更新数据,管理数据库和创建表。 如果您已经熟悉其他关系数据库管理系统(如PostgreSQL,Oracle或Microsoft SQL Server等),

    2024年04月14日
    浏览(13)
  • 【OpenCV入门】第一部分——图像处理基础

    【OpenCV入门】第一部分——图像处理基础

    图像处理包括4个基本操作: 读取图像 、 显示图像 、 保存图像 和 获取图像属性 。 imread() filename :目标图像的完整路径名。 flags :图像的颜色类型的标记,有0和1两个值,其中1为默认值。当读取一幅彩色图像时,如果想要得到一幅 彩色图像 ,那么flags的值为1(此时flags的

    2024年02月11日
    浏览(14)
  • [软件测试] 第一部分 软件测试基础

    软件测试期末复习系列 课件知识点整合 : 软件测试基础 白盒测试 黑盒测试 PTA习题汇总 : 软件测试基础 白盒测试-逻辑覆盖测试 白盒测试-基本路径测试 白盒测试-静态测试 黑盒测试-等价类划分 黑盒测试-边界值测试 黑盒测试-场景法 软件危机 :软件危机是指落后的软件生

    2024年02月04日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包