关于go:池模式和原型模式之间有什么区别?

what is the difference between pool and prototype patterns?

我刚刚读过《戈兰设计模式》一书中关于创造模式的章节。这些是:

  • 工厂
  • 抽象工厂
  • 原型
  • 独生子女
  • 建设者

我已经在Github上创建了一个存储库,列出了所有这些内容。我已经找到了其他像我的仓库:

  • TMRT/GO模式
  • YKSZ/GO设计模式
  • Jeanphorn/Go设计模式

有的把object-pool列为模式,有的把simple-factoryfactory-method列为模式。Go中是否有一个正式的创造模式列表?知道列表是否重要,或者更重要的是知道什么是可能的,并且能够在正确的上下文中使用正确的代码?知道还是不知道世界上所有的模式?

而且,…原型和对象池模式之间有什么区别?它们看起来很像我。


池有助于限制分配的新对象的数量;原型是一种指定如何创建新对象的方法。

对象池与缓存创建的对象实例有关,这些对象实例稍后可以访问。Golang有一个实现(https://golang.org/pkg/sync/pool),主要用于释放垃圾收集器上的压力。通常使用池的方法如下:

  • 询问池中的实例
  • 池将返回一个未使用的对象,或者它将分配一个新对象,并将新实例返回给您。
  • 你用这个物体做你需要的任何事情
  • 您将对象返回池,以便另一个"客户机"可以使用它。
  • Pool实现中,您会注意到您可以通过一个"创建"函数来指定池应该如何在步骤2中创建实例。

    New func() interface{}

    这个函数可以简单地分配一个空结构,或者如果创建逻辑很复杂,它可以使用原型模式来克隆新的实例。

    原型模式更侧重于抽象如何从原型对象创建多个对象的"副本"。当您试图避免使用new关键字时,主要使用此模式。


    设计模式并不孤立地存在,它们有自己的关系。因此,例如,对象池可能使用工厂或原型来最初填充池或处理耗尽。该池中的对象可能符合命令模式,或者是生成器模式的示例。

    在实践中,你不可能知道所有模式的所有细节,最重要的是要知道意图。模式实现了什么。当使用模式时,剩余的细节可以并且应该取自模式目录,随着时间的推移,您将全面学习一些模式并参考其他模式。

    模式目录是完全文档化的设计模式的集合。GOF设计模式书可能是最著名的模式目录,但是您提到的书甚至Github存储库都可以实现相同的目的。

    enter image description here