原型模式(Prototype Patten)

定义
利用已有对象(原型)进行复制的方式来创建新对象,已达到节省创建时间的目的
使用场景
- 对象创建成本比较大,并且同一个类对不同对象之间差别不大
常见分类
- 浅拷贝
- 深拷贝
Go源码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| package prototype
import ( "encoding/json" "time" )
type KeyWord struct { Word string Freq int Visit int UpdateTime time.Time }
func (k *KeyWord) Clone() *KeyWord { var newKeyword KeyWord b, _ := json.Marshal(k) json.Unmarshal(b, &newKeyword) return &newKeyword }
type KeyWords map[string]*KeyWord
func (km KeyWords) Clone(updateWords []*KeyWord) KeyWords { newKeyWords := KeyWords{} for k, v := range km { newKeyWords[k] = v }
for _, v := range updateWords { newKeyWords[v.Word] = v.Clone() } return newKeyWords }
|