《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 分钟前
告别重复造轮子!业务组件多场景复用实战指南
前端·javascript·设计模式
Arva .2 小时前
讲一下 Spring 中用到的设计模式
java·spring·设计模式
云鹤_3 小时前
【Amis源码阅读】低代码如何实现交互(下)
前端·低代码·架构
REDcker3 小时前
UEFI BIOS深度解析:现代固件架构的革命性突破
架构·操作系统·uefi·bios
智慧化智能化数字化方案4 小时前
架构进阶——解读45页数据治理能力提升转项目培训-数据架构【附全文阅读】
架构·数据架构·数据治理能力·企业it治理·企业架构规划
繁华似锦respect4 小时前
lambda表达式中的循环引用问题详解
java·开发语言·c++·单例模式·设计模式·哈希算法·散列表
没逻辑4 小时前
Gopher 带你学 Serverless 架构:从服务器运维到按需计算的范式转变
架构
heartbeat..4 小时前
介绍一下软件开发中常见的几种的架构模式
java·架构·开发
狗哥哥4 小时前
Pinia Store 平滑迁移:用代理模式实现零风险重构
前端·架构
wshzd5 小时前
LLM之Agent(三十八)|AI Agents(七):Multi-Agent架构
人工智能·架构