в чем разница между пулами и образцами прототипов?

Я только что прочитал главу о шаблонах создания в книге Design Patterns в golang. Это:

  • завод
  • абстрактный завод
  • прототип
  • одиночка
  • строитель

Я создал репозиторий github, чтобы перечислить все из них. Я искал другие репозитории, такие как мои:

Некоторые перечисляют object-pool как шаблон, другие simple-factory и factory-method. Существует ли официальный список шаблонов создания в go? Важно ли знать список или важно знать, что возможно, и иметь право использовать правильный код в правильном контексте? С или не знаете все образцы в мире?

И... в чем разница между шаблонами прототипов и пулов объектов? Они очень похожи на меня.

1
13 сент. '17 в 9:00
источник поделиться
2 ответов

Пул помогает ограничить количество выделенных новых объектов; Прототип - это способ определения того, как создается новый объект.

Пулы объектов связаны с кэшированием созданных экземпляров объектов, к которым можно получить доступ позже. Golang имеет реализацию (https://golang.org/pkg/sync/#Pool), которая в основном используется для снятия давления с сборщика мусора. Обычный способ использования пула следует за чем-то вроде:

  1. спросить пул для экземпляра
  2. Пул либо вернет вам неиспользуемый объект, либо выделит новый объект, и вернет вам новый экземпляр
  3. Вы используете объект, чтобы делать все, что вам нужно
  4. Вы возвращаете объект обратно в пул, чтобы другой "клиент" мог его использовать.

В реализации Pool вы заметите, что вы можете передать функцию "создания", чтобы указать, как пул должен создать экземпляр на шаге 2.

New func() interface{}

Эта функция может просто выделить пустую структуру или использовать шаблон Prototype для клонирования новых экземпляров, если логика создания была сложной.

Шаблон Prototype более сфокусирован на абстрагировании того, как вы можете создать много "копий" объекта из прототипа. В основном вы используете этот шаблон, если хотите попытаться избежать использования new ключевого слова.

5
13 сент. '17 в 9:59
источник

Шаблоны проектирования не существуют изолированно, у них есть собственные отношения. Например, пул объектов может использовать фабрику или прототип для первоначального заполнения пула или устранения усталости. Объекты в этом пуле могут соответствовать шаблону команды или быть примерами шаблона построителя.

На практике вы не можете знать все детали всех паттернов, самое важное - это намерение. Какова картина. При использовании шаблона оставшиеся детали могут и должны быть взяты из каталога шаблонов, со временем вы будете изучать некоторые шаблоны всесторонне и ссылаться на другие.

Каталог шаблонов представляет собой набор полностью задокументированных шаблонов проектирования. Книга шаблонов дизайна GoF, вероятно, является самым известным каталогом образцов, однако книга, которую вы упоминаете, и даже репозитории github могут выполнять ту же цель.

enter image description here

3
13 сент. '17 в 9:44
источник

Посмотрите другие вопросы по меткам или Задайте вопрос