原型模式

2021-02-19  本文已影响0人  小幸运Q

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

// 示例结构体
type Example struct {
    Content string
}

需要深拷贝的变量必须首字母大写才可以被拷贝

// 简单值
func (e *Example) Clone() *Example {
    res := *e
    return &res
}

// 结构体(基于序列化和反序列化来实现对象的深度拷贝:)
func deepCopy(dst, src interface{}) error {
    var buf bytes.Buffer
    if err := gob.NewEncoder(&buf).Encode(src); err != nil {
        return err
    }
    return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
}

标准库gob是golang提供的“私有”的编解码方式,它的效率会比json,xml等更高,特别适合在Go语言程序间传递数据。

//(对于map和slice无效,依旧共享相同内存对象,其他会拷贝一份)
//(可以单独处理map和slice)
Pc2:=Pc1
上一篇 下一篇

猜你喜欢

热点阅读