原型模式

概念

原型模式(prototype), 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

原型模式其实就是从一个对象再创建另一个可定制的对象(深拷贝), 新对象使用者不知道任何创建的细节。

具体实现:

  1. 创建一个结构体, 结构体封装一个深copy方法, 返回一个新的对象(这个时候数据没变,原来的结构体变量地址变了)。

模式的场景和优缺点

使用场景

一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象供调用者使用

优点

1、性能提高

2、逃避构造函数的约束

缺点

配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候

代码实现


package main

import "fmt"

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

// Clone ...
func (e *Example) Clone() *Example {
    // golang 深拷贝, 拷贝数据, 创建一个新的对象, 申请了新的内存, 内存不同。 浅拷贝, 直接复制指向对象的指针, 新老对象的指向的地址一样。
    res := *e
    return &res
}

func main() {
    var e *Example
    var eClone *Example
    e = &Example{
        Content: "Example",
    }
    fmt.Printf("e:%p,Content:%s\n", e, e.Content)

    eClone = e.Clone()
    fmt.Printf("clone e:%p,Content:%s\n", eClone, eClone.Content)
}



©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容