《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 小时前
rpc和http的区别,为啥golang使用grpc 不使用http?
http·rpc·golang
FLZJ_KL1 小时前
【设计模式】【创建型模式】单例模式(Singleton)
java·单例模式·设计模式
WeiLai11123 小时前
面试基础--微服务架构:如何拆分微服务、数据一致性、服务调用
java·分布式·后端·微服务·中间件·面试·架构
万兴丶4 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
大脑经常闹风暴@小猿4 小时前
1.1 go环境搭建及基本使用
开发语言·后端·golang
菜鸟一枚在这4 小时前
深入剖析抽象工厂模式:设计模式中的架构利器
设计模式·架构·抽象工厂模式
码熔burning4 小时前
(三)趣学设计模式 之 抽象工厂模式!
设计模式·抽象工厂模式
Swift社区4 小时前
【微服务优化】ELK日志聚合与查询性能提升实战指南
spring·elk·微服务·云原生·架构
程序猿多布5 小时前
C#设计模式 学习笔记
设计模式·c#
丰年稻香6 小时前
系统架构设计师备考策略
架构·系统架构设计师