Почему нужно использовать метод фабрики создать объекты [дубликат]

11
задан Community 23 May 2017 в 12:34
поделиться

4 ответа

Создавая объекты с помощью фабрик, вы избегаете того, чтобы код подсистемы зависел от конкретных реализаций интерфейсов, которые она использует - «программа для интерфейса, а не для реализации» - самая важная фраза в книге «Шаблоны проектирования» , и фабрики - один из важнейших способов продвижения вашего кода к этой превосходной цели (внедрение зависимостей - еще один ключевой DP для этого, который не рассматривается в классической книге, но тогда часто зависимости, которые вы вводите , являются фабриками во всяком случае, так что это упущение не так уж и ужасно ;-).

11
ответ дан 3 December 2019 в 06:19
поделиться

У вас есть различные преимущества с фабричным методом.

  1. Вы можете избежать создания повторяющихся объектов (если ваши объекты неизменяемы). Фабрика может возвращать тот же объект для того же набора параметров.
  2. Вы можете создать и вернуть любой подтип типа, для создания которого предназначена фабрика. Замена реализаций без изменения клиентского кода (вызывающего кода).
  3. Вы можете возвращать один и тот же объект каждый раз (другими словами, синглтон, если единственный способ получить объект - это фабрика).
4
ответ дан 3 December 2019 в 06:19
поделиться

Основная идея заключается в том, чтобы управлять созданием .

Клиент вызывает объект Method
Factory.GetObject (Spec spec)

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

Этот подход более расширяемый и устойчивый к изменениям - в будущем

  • вы можете добавить новый параметр настройки в Spec и обработать его внутри фабричного метода, чтобы вернуть LatestAndGreatestSubclass
  • вы могли бы улучшить существующий объект и вернуть v2 предыдущего подкласса или заменить его с совершенно другой реализацией: существующие клиенты и интерфейс фабричного метода не должны были бы меняться.

Комментарий получился слишком длинным ... Поэтому пришлось опубликовать его как ответ.

1
ответ дан 3 December 2019 в 06:19
поделиться

1-Простота реализации.

Код приложения с двумя клиентами не нужно кардинально менять.

Создание 3-х классов является абстракцией от клиентского кода.

Вы также можете проверить эту ветку Заводской образец. Когда использовать заводские методы?

3
ответ дан 3 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: