Фабричний метод (шаблон проєктування)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Фабричний метод (англ. Factory Method) — шаблон проєктування, належить до класу твірних шаблонів.

Призначення

[ред. | ред. код]

Визначає інтерфейс для створення об'єкта, але залишає підкласам рішення про те, який саме клас інстанціювати. Фабричний метод дозволяє класу делегувати інстанціювання підкласам.

Застосування

[ред. | ред. код]

Слід використовувати шаблон Фабричний метод коли:

  • класу не відомо заздалегідь, об'єкти яких саме класів йому потрібно створювати;
  • клас спроєктовано так, щоб об'єкти, котрі він створює, специфікувалися підкласами;
  • клас делегує свої обов'язки одному з кількох допоміжних підкласів, та потрібно локалізувати знання про те, який саме підклас приймає ці обов'язки на себе.

Структура

[ред. | ред. код]
UML діаграма, що описує структуру шаблону проєктування Фабричний метод
  • Product — продукт:
    • визначає інтерфейс об'єктів, що створюються фабричним методом;
  • ConcreteProduct — конкретний продукт:
    • реалізує інтерфейс Product;
  • Creator — творець:
    • оголошує фабричний метод, що повертає об'єкт класу Product. Creator може також визначати реалізацію за умовчанням фабричного методу, що повертає об'єкт ConcreteProduct;
    • може викликати фабричний метод для створення об'єкта Product;
  • ConcreteCreator — конкретний творець:
    • заміщує фабричний метод, що повертає об'єкт ConcreteProduct.

Переваги

[ред. | ред. код]
  • дозволяє зробити код створення об'єктів більш універсальним, не прив'язуючись до конкретних класів (ConcreteProduct), а оперуючи тільки загальним інтерфейсом (Продукт);
  • дозволяє встановити зв'язок між паралельними ієрархіями класів.

Недоліки

[ред. | ред. код]
  • необхідність створювати спадкоємця Creator для кожного нового типу продукту (ConcreteProduct).

Стосунки

[ред. | ред. код]

Творець покладається на свої підкласи в означенні фабричного методу, котрий буде повертати екземпляр відповідного конкретного продукту.

Реалізація

[ред. | ред. код]

Деякі з сучасних мов програмування підтримують фабричний метод на рівні власних конструкцій таким чином, що ієрархія класів «Creator» не реалізовується. Дивись альтернативні реалізації нижче.

JavaScript

[ред. | ред. код]

Джерела

[ред. | ред. код]

Див. також

[ред. | ред. код]

Література

[ред. | ред. код]

Алан Шаллоуей, Джеймс Р. Тротт. Шаблоны проектирования. Новый подход к объектно-ориентированному анализу и проектированию = Design Patterns Explained: A New Perspective on Object-Oriented Design. — М. : «Вильямс», 2002. — 288 с. — ISBN 0-201-71594-5.