首页 文章

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

提问于
浏览
2

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

  • 工厂

  • 抽象工厂

  • 原型

  • 单身人士

  • 建设者

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

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

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

2 回答

  • 4

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

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

    • 向池中询问实例

    • 池将为您返回一个未使用的对象,或者它将分配一个新对象,并将新实例返回给您

    • 您可以使用该对象执行您需要的任何操作

    • 您将对象返回池中,以便另一个"client"可以使用它 .

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

    New func() interface{}

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

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

  • 6

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

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

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

    enter image description here

相关问题