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

文章目录

  • [1. 概念](#1. 概念)
    • [1.1 简述](#1.1 简述)
    • [1.2 角色](#1.2 角色)
    • [1.3 类图](#1.3 类图)
  • [2. 代码示例](#2. 代码示例)
    • [2.1 设计](#2.1 设计)
    • [2.2 代码](#2.2 代码)
    • [2.3 类图](#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 代码

go 复制代码
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 类图

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


相关推荐
高 朗1 小时前
2025高频面试设计模型总结篇
设计模式·面试·职场和发展
冷琅辞1 小时前
Go语言的嵌入式网络
开发语言·后端·golang
強云4 小时前
界面架构- MVP(Qt)
qt·架构
徐小黑ACG5 小时前
GO语言 使用protobuf
开发语言·后端·golang·protobuf
赋创小助手14 小时前
Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
运维·服务器·人工智能·科技·架构
magic 24514 小时前
MVC(Model-View-Controller)架构模式和三层架构介绍
架构·mvc
芯片SIPI设计15 小时前
HBM(高带宽内存)DRAM技术与架构
架构
Summer_Xu15 小时前
模拟 Koa 中间件机制与洋葱模型
前端·设计模式·node.js
能来帮帮蒟蒻吗15 小时前
GO语言学习(16)Gin后端框架
开发语言·笔记·学习·golang·gin
拉丁解牛说技术15 小时前
AI大模型进阶系列(01)AI大模型的主流技术 | AI对普通人的本质影响是什么?
后端·架构·openai