创建型-原型模式

原型模式(Prototype Patten)

原型模式

定义

利用已有对象(原型)进行复制的方式来创建新对象,已达到节省创建时间的目的

使用场景

  1. 对象创建成本比较大,并且同一个类对不同对象之间差别不大

常见分类

  1. 浅拷贝
  2. 深拷贝

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

/* 说明:
实现一个定时更新的关键词字典
其中key为关键词,value为该关键词对应的一些属性(出现频率,访问次数,更新时间等)
每次更新只会更新很少的一部分关键词,非全量更新
*/

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
}