《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


相关推荐
sorryhc6 小时前
MCP、Agent、大模型应用架构解读
架构
阿湯哥6 小时前
多智能体架构深度解析:企业落地如何选择Skills与SubAgents?
架构·wpf
敲敲了个代码6 小时前
React 官方纪录片观后:核心原理解析与来龙去脉
前端·javascript·react.js·面试·架构·前端框架
无心水6 小时前
1、Go语言工作区和GOPATH实战指南:从项目初始化到部署
开发语言·后端·架构·golang·go·gopath·go mod init
萤丰信息6 小时前
智慧园区新基建:“云-管-端”架构的破局之路与数智革命
大数据·人工智能·科技·安全·架构·智慧城市·智慧园区
王然-HUDDM6 小时前
HUDDM(全息普适需求动力学模型)详解
数学建模·架构·系统架构·agi·预编码算法
代码游侠6 小时前
ARM开放——阶段问题综述(一)
arm开发·笔记·嵌入式硬件·学习·架构
王卫东6 小时前
Vibe Coding:AI原生时代的编程范式革命与架构实践
架构·ai-native·vibe coding
w***76556 小时前
PHP vs Go:动态与静态语言的巅峰对决
开发语言·golang·php
vx-bot5556666 小时前
企业微信开放平台:生态化集成的架构演进与实践
架构·微信开放平台