Абстрактная фабрика (шаблон проектирования)

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Абстрактная фабрика»)
Перейти к навигации Перейти к поиску
Абстрактная фабрика
Abstract factory
Тип порождающий
Назначение Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.
Структура
Применяется в случаях
  • Когда программа должна быть независимой от процесса и типов создаваемых новых объектов.
  • Когда необходимо создать семейства или группы взаимосвязанных объектов исключая возможность одновременного использования объектов из разных этих наборов в одном контексте[1].
Плюсы
  • изолирует конкретные классы;
  • упрощает замену семейств продуктов;
  • гарантирует сочетаемость продуктов.
Минусы
  • сложно добавить поддержку нового вида продуктов.
Описан в Design Patterns Да

Абстрактная фабрика (англ. Abstract factory) — порождающий шаблон проектирования, предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов. Шаблон реализуется созданием абстрактного класса Factory, который представляет собой интерфейс для создания компонентов системы (например, для оконного интерфейса он может создавать окна и кнопки). Затем пишутся классы, реализующие этот интерфейс[2].

Назначение[править | править код]

Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.

Реализация[править | править код]

Плюсы[править | править код]

  • изолирует конкретные классы;
  • упрощает замену семейств продуктов;
  • гарантирует сочетаемость продуктов.

Минусы[править | править код]

  • сложно добавить поддержку нового вида продуктов.

Применение[править | править код]

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

Примеры[править | править код]

Пример на Kotlin[править | править код]

Пример на Swift[править | править код]

Пример на C#[3][править | править код]

Пример на Java[править | править код]

Пример на PHP5[править | править код]

Пример на Python[править | править код]

Пример на Scala[править | править код]

Пример на Go[править | править код]

Пример на Ruby[править | править код]

Литература[править | править код]

  • Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приёмы объектно-ориентированного проектирования. Паттерны проектирования = Design Patterns: Elements of Reusable Object-Oriented Software. — СПб.: «Питер», 2007. — С. 366. — ISBN 978-5-469-01136-1. (также ISBN 5-272-00355-1)

Ссылки[править | править код]

Примечания[править | править код]

  1. Паттерн Abstract Factory. Дата обращения: 14 июня 2013. Архивировано 14 июня 2013 года.
  2. Порождающие шаблоны: Абстрактная фабрика (Abstract factory). Дата обращения: 14 июня 2013. Архивировано 14 июня 2013 года.
  3. Abstract Factory .NET Design Pattern in C# and VB - dofactory.com. www.dofactory.com. Дата обращения: 3 марта 2016. Архивировано 3 марта 2016 года.