go设计模式之美-原型模式

go设计模式之美-原型模式

1. 定义

由于反复创建大量重复对象会造成效率损失,原型模式利用已有原型对象进行复制拷贝的方式来创建新对象,已达到节省创建时间的目的

go设计模式之美-原型模式_第1张图片

2. 需求
  1. 项目启动时需要先将游戏的道具配置先加载到内存中
  2. 每次更新游戏对象数据属性时,需要重新再次加载一遍
  3. 游戏道具对象的属性数据必须来自同一版本,不能一部分数据来自版本一,更新的一部分来自版本二,所以需要将每次更新的数据全部深拷贝到内存中
代码实现
package prototype

import (
	"encoding/json"
)

type ItemList struct {
	ItemId   int
	ItemType int
	Count    int64
}
// 利用序列化和反序列化实现深拷贝
func (i *ItemList) Clone() (itemList *ItemList) {
	marshal, err := json.Marshal(i)
	if err != nil {
		panic(err)
	}
	err = json.Unmarshal(marshal, &itemList)
	if err != nil {
		panic(err)
	}
	return
}

// 游戏道具map对象
type GameObject map[int]*ItemList

func (gameMap GameObject)Clone(list []*ItemList) GameObject{
	gameObject:=GameObject{}
	for key,value:=range list{
		gameObject[key]=value     // 这里是浅拷贝,直接把list的地址给gameObject
	}
	// 替换掉需要更新的游戏道具,这里用的是深拷贝
	for _,idList:=range gameMap{
		gameObject[idList.ItemId]=idList.Clone()
	}

	return gameObject
}

你可能感兴趣的:(go设计模式,go,golang,设计模式)