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

时间:2017-09-13 06:00:57

标签: go design-patterns

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

  • 工厂
  • 抽象工厂
  • 原型
  • 助洗剂

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

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

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

2 个答案:

答案 0 :(得分:6)

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

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

  1. 向池中询问实例
  2. 该池将返回一个未使用的对象,或者它将分配一个新对象,并将新实例返回给您
  3. 您可以使用该对象执行您需要的任何操作
  4. 您将对象返回池中,以便其他“客户”可以使用它。
  5. Pool实现中,您会注意到您可以传递“创建”功能来指定池在步骤2中应如何创建实例。

    New func() interface{}

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

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

答案 1 :(得分:4)

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

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

模式目录是完全记录的设计模式的集合。 GoF Design Patterns书可能是最着名的模式目录,但是你提到的书甚至github存储库都可以达到同样的目的。

enter image description here