Шаблоны проектирования: Фабрика против фабрики метод против абстрактной фабрики
Я читал шаблонов проектирования с веб-сайта
Там я прочитал о Фабрика, фабричный метод и абстрактная фабрика, но они настолько запутано, не понятно по определению. По данным определений
Фабрика - создает объекты, не подвергая логику экземпляра клиенту и ссылается на вновь созданный объект через общий интерфейс. Это упрощенная версия метода фабрики
фабричный метод - определяет интерфейс для создания объектов, но давайте подклассы, чтобы решить, какой класс инстанцировать и ссылается на вновь созданный объект через общий интерфейс.
абстрактная фабрика - предлагает интерфейс для создания семьи связанных объектов без явного указания их классов.
Я также посмотрел на другие сайте StackOverflow нити относительно абстрактная Фабрика против метод фабрики, но UML диаграмм тянет туда сделать моем понимании еще хуже.
Может кто-нибудь пожалуйста, скажите мне
- Как эти три модели отличаются друг от друга?
- Когда какую использовать?
- А также, если возможно, какие-то примеры на Java, связанные с этими картинами?
Все три типа фабрика делает то же самое: они являются "умные конструктора и".
Позвольте'говорят, что вы хотите, чтобы иметь возможность создать два вида фруктов: яблоко и апельсин.
<Н3>Фабрика</Н3> Завод является "фиксированный", в том, что у вас есть только одна реализация без создания подклассов. В этом случае, вы будете иметь класс такой:
Пример: построение яблоко или апельсин-это слишком сложный для обработки в конструкторе либо.
<Н3>метод фабрики</Н3> Фабричный метод обычно используется, когда у вас есть некоторые универсальные обработки в классе, но хотите отличаться, какой плод вы на самом деле использовать. Так:
...затем вы можете повторно использовать общие функциональные возможности в FruitPicker.pickFruit () путем реализации фабричного метода в подклассах:
<Н3>абстрактная Фабрика</Н3> Абстрактная фабрика является, как правило, используется для таких вещей, как зависимость/стратегии инъекции, когда вы хотите, чтобы иметь возможность создать целое семейство предметов, которые должны быть на "такой же", и есть некоторые общие базовые классы. Здесь'ы смутно фруктов, например. Дело здесь заключается в том, что мы хотим убедиться, что мы не'т случайно использовать OrangePicker на яблоко. Как долго мы сможем получить наши фрукты и выбора из той же фабрики, они будут совпадать.
Фабрика: создает объекты, не подвергая логику экземпляра клиенту.
Способ завода: определить интерфейс для создания объекта, но давайте подклассы решить, какой класс инстанцировать. Фабричный метод позволяет классу отложить инстанцирование подклассам
Абстрактная Фабрика: предоставляет интерфейс для создания семьи, связанные или зависимые объекты без указания их конкретных классов.
AbstractFactory шаблон использует состав, чтобы делегировать ответственность за создание объекта другого класса, в то время как метод фабрики дизайн шаблона использует наследование и опирается на производный класс или вспомогательный класс для создания объекта
Фабрика: клиент просто нужен класс и не задумываться о том, какая конкретная реализация его становится.
Фабричный метод: клиент не'т знаю, что классы бетона необходимо создать во время выполнения, но просто хочет сделать класс, который будет делать эту работу.
AbstactFactory: если в вашей системе есть создать несколько семейств продуктов или вы хотите, чтобы обеспечить библиотеку продуктов, не подвергая детали реализации.
Абстрактные классы Фабрика часто реализуется с помощью метода фабрики. Фабричные методы обычно называют методами в шаблон.
Фабрики и FactoryMethod
Цель:
Определить интерфейс для создания объекта, но давайте подклассы решить, какой класс инстанцировать. Заводской метод позволяет классу отложить инстанцирование для суб-классов.
UML-схемы:
Продукт: он определяет интерфейс объектов фабричный метод создает.
ConcreteProduct: продукт реализует интерфейс
Создатель: объявляет фабричный метод
ConcreateCreator: реализует метод фабрики, чтобы возвратить экземпляр ConcreteProduct
Постановка задачи: создать фабрику игр с помощью методов фабрики, который определяет интерфейс игры.
Фрагмент кода:
https://stackoverflow.com/questions/69849/factory-pattern-when-to-use-factory-methods/35857241#35857241
Сравнение с другими креационистскими моделей:
Проектирование начинают с помощью фабричный метод (менее сложная, более настраиваемый, подклассы размножаться) и развиваться в направлении абстрактная Фабрика, прототип, или строителя (более гибкая, более сложные), как конструктор узнает, где более гибкого
Абстрактная Фабрика занятия чаще всего реализуется с методы фабрики, но они также могут быть реализованы с использованием прототип
Литература для дополнительного чтения: дизайн-моделей Sourcemaking
Завод - отдельный класс фабрики для создания сложных объектов.
Например, класс FruitFactory для создания объекта фруктов
Фабричный метод - а не целый отдельный класс для фабрики, просто добавить один метод в этом классе себя как фабрика.
Экс:
Абстрактный фабричный метод - фабрика фабрика
Пример: Допустим, мы хотим построить завод по компьютерной части. Итак, существует несколько типов компьютеров, как Ноутбук, Настольный компьютер, сервер.
Поэтому для каждого типа иди нам нужен завод. Так мы создаем один завод авторитетных заводов, как показано ниже
Теперь эти 3 себя снова заводы. (Вы будете иметь дело с самим PartFactory, но под капотом, там будет отдельная реализация на основе того, что вы предоставили в абстрактная фабрика)
Редактировать: Редактировать, чтобы обеспечить точные интерфейсы для абстрактной фабрики согласно возражений в комментариях.
Каждый шаблон дизайна процветает, чтобы помочь гарантировать, что написано, код не тронут. Все мы знаем, что как только мы касаемся рабочий код, есть дефекты в существующие рабочие потоки, и многое другое нуждается в тестировании, чтобы сделать, чтобы убедиться, что мы ничего не нарушали.
Шаблон фабрика создает объекты на основе критериев ввода, таким образом, гарантируя, что вы не должны писать код, как если после этого создать такой объект, то этот объект как бы. Хорошим примером этого является сайт о путешествиях. Туристический сайт может обеспечить только проезд (самолет, поезд, автобус) или / и предоставить отели или / и предоставить туристические пакеты притяжения. Теперь, когда пользователь выбирает следующий, веб-сайт должен решать, какие объекты он должен создать. Оно должно только создавать путешествий или гостинице тоже объект.
Теперь, если вы видите добавить еще один сайт в ваше портфолио, и вы полагаете, что одну и ту же основную быть использованы, например, совместного использования автомобилей сайт, который сейчас ищет такси's и делает платежи в интернете, вы можете использовать абстрактная фабрика по сути. Таким образом, вы можете просто щелкнуть в еще один завод кабин и совместные поездки.
Обе фабрики'ы не имеют ничего общего друг с другом, поэтому хороший дизайн, чтобы держать их в разные фабрика'ы.
Надеюсь, это теперь понятно. Изучаю сайт снова держа этот пример в уме, надеюсь, это поможет. И я очень надеюсь, что я правильно представляла модели :).
Используя метод фабрики, пользователь может создавать А1 или А2 AbstractProductA.
Но абстрактная Фабрика, имеющая более 1 фабричный метод ( например: 2 методы фабрики), используя те методы фабрики будет создан набор объектов,/ связанные объекты. Используя абстрактную фабрику, пользователь может создавать А1, Б1 объектов AbstractProductA, AbstractProductB
За этот ответ, я имею в "банда четырех" в Книгу.
Нет нет на "фабрике" и не "по-простому фабрики и" не то "виртуальная фабрика" и определения в книге. Обычно когда люди говорят о том, что "Фабрика" по шаблону, они могут говорить о то, что создает конкретный объект из класса (но не в "Строитель" по образцу); они может или не может обратитесь в "Метод фабрики" или "абстрактная Фабрика" и узоров. Любой человек может реализовать на "фабрике" и как он выиграл't, потому что это's не формальный термин (имейте в виду, что некоторые люди\компании\общин могут иметь собственный словарный запас).
Книга только содержит определения "и абстрактным Фабрика" и "фабричный метод и".
Вот несколько определений из книги и краткое объяснение, почему оба они могут быть настолько запутанной. Я опускаю примеры кода, потому что вы можете найти их в других ответов:
Метод фабрики (Гоф): определить интерфейс для создания объекта, но давайте подклассы решить, какой класс инстанцировать. Заводской метод позволяет классу отложить инстанцирование подклассам.
Абстрактная Фабрика (Гоф): предоставляет интерфейс для создания семьи, связанные или зависимые объекты без указания их конкретных классов.
Источником путаницы: часто можно назвать класс, который используется в "Метод фабрики" и рисунок как "фабрики и quot.; Этот класс является абстрактным по определению. Что's, почему оно легко назвать этот класс "и абстрактным Фабрика" по. Но это's просто имя класса; вы должны'т путать с "абстрактная Фабрика" по шаблону (имя класса != название рисунка). В "абстрактная Фабрика" и картина иная - это **** не использовать абстрактный класс; он определяет интерфейс (не обязательно язык программирования, интерфейс) для создания части более крупного объекта или объектов, которые связаны друг с другом, или он должен быть создан определенным образом.
Никто не цитирует оригинальной книги шаблоны проектирования: элементы объектно-ориентированного многоразовые Software, которая дает ответа в первых двух пунктах раздела “Обсуждение порождающих паттернов” (выделено мной):