go - 池模式和原型(prototype)模式有什么区别?

标签 go design-patterns

我刚刚阅读了 golang 设计模式一书中关于创建模式的章节。它们是:

  • 工厂
  • 抽象工厂
  • 原型(prototype)
  • 单例
  • build 者

我已经在 github 上创建了一个存储库来列出所有这些。我一直在寻找像我这样的其他存储库:

有些将 object-pool 列为模式,其他的 simple-factoryfactory-method。 go 中是否存在官方的创建模式列表?了解列表重要,还是了解可能的内容并能够在正确的上下文中使用正确的代码更重要?知无知天下法?

还有,...原型(prototype)和对象池模式之间有什么区别?他们看起来和我很像。

最佳答案

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

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

  1. 向矿池索要实例
  2. 池要么返回一个未使用的对象,要么分配一个新对象,并将新实例返回给您
  3. 您可以使用该对象做任何您需要的事情
  4. 您将该对象还给池,以便另一个“客户”可以使用它。

Pool 实现中,您会注意到您可以传递一个“创建”函数来指定池应如何在步骤 2 中创建实例。

新的 func() 接口(interface){}

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

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

关于go - 池模式和原型(prototype)模式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46189914/

相关文章:

design-patterns - 如何在 Symfony2 中拥有模型管理器?

Delphi原型(prototype)模式

go - 为什么用 ParseInLocation 打印不同的时区?

json - Swagger如何描述JSON主体参数

go - 为什么调用此 String() 方法而不按名称调用它

go - 在 Go 中从 slice 构造数组

java - 我们应该为 DAO 使用 spring 单例吗

java - 层间通信装饰器

go - 避免在数据库中保存空白结构对象

php - 使用 preg_replace 检查多个模式?