池和原型模式有什么区别?

sen*_*rio 2 design-patterns go

我刚刚阅读了golang中的Design Patterns一书中关于Creational模式的章节.这些是:

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

我在github上创建了一个存储库来列出所有这些存储库.我找过像我这样的其他资料库:

一些列表object-pool作为一个模式,别人simple-factoryfactory-method.go中是否存在正式的创作模式列表?知道列表是否重要,或者知道什么是可能的并且能够在正确的上下文中使用正确的代码更重要?有或没有知道世界上所有的模式?

而且,......原型和对象池模式之间有什么区别?他们看起来和我很相似.

Rya*_*anD 6

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

对象池涉及缓存创建的对象实例,以后可以访问.Golang有一个实现(https://golang.org/pkg/sync/#Pool),主要用于减轻垃圾收集器的压力.使用池的常用方法如下:

  1. 向池中询问一个实例
  2. 池将返回一个未使用的对象,或者它将分配一个新对象,并将新实例返回给您
  3. 您可以使用该对象执行您需要的任何操作
  4. 您将对象返回池中,以便另一个"客户端"可以使用它.

Pool实现中,您会注意到您可以传递"创建"功能来指定池在步骤2中应如何创建实例.

New func() interface{}

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

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


Mar*_*mer 5

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

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

模式目录是完整记录的设计模式的集合。在GoF的设计模式的书可能是最有名的模式目录,但是这本书你提到甚至GitHub的库可以实现同样的目的。

在此处输入图片说明