《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


相关推荐
Dr.kangder3 小时前
嵌入式处理器架构解析(十)——DSP+FPGA
fpga开发·架构·嵌入式
ltl9 小时前
高可用设计模式:冗余、故障转移与仲裁
架构
用户938515635079 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
Dawson Zhu10 小时前
基于Palantir Foundry构建半导体制造AI友好型数据中台:从良率分析场景谈起
人工智能·语言模型·架构·制造·agi
AI人工智能+电脑小能手14 小时前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
2401_8432537015 小时前
Agent消息降级矩阵:当告警卡片遇到纯文本SMS渠道
架构
奈斯先生Vector16 小时前
AI 辅助线上排障工作台:从故障证据、Codex 协作到可回放修复
人工智能·架构·开源·aigc·midjourney
代码方舟16 小时前
零信任架构实战:基于天远柠檬查出险-登记证API构建自动化车辆履约评估网关
人工智能·python·架构·自动化
程序员讲BPM工作流16 小时前
基于Petri网建模原理:原生自研信创BPM流程引擎工作流模式架构解析
架构
明源云17 小时前
租赁管理系统软件推荐:如何选到真正好用的不动产租赁管理软件
大数据·人工智能·架构