-
Notifications
You must be signed in to change notification settings - Fork 3
Abstract Factory
Pandas edited this page Jun 16, 2017
·
9 revisions
Абстрактная фабрика - паттерн, порождающий объекты.
Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов.
Используйте паттерн абстрактная фабрика, когда:
- Cистема не должна зависеть от того, как создаются, компонуются и представляются входящие в нее объекты;
- Входящие в семейство взаимосвязанные объекты должны использоваться вместе и вам необходимо обеспечить выполнение этого ограничения;
- Система должна конфигурироваться одним из семейств составляющих ее объектов;
- Вы хотите предоставить библиотеку объектов, раскрывая только их интерфейсы, но не реализацию.
- AbstractFactory - абстрактная фабрика: объявляет интерфейс для операций, создающих абстрактные объекты-продукты;
- ConcreteFactory - конкретная фабрика: реализует операции, создающие конкретные объекты- продукты;
- AbstractProduct - абстрактный продукт: объявляет интерфейс для типа объекта-продукта;
- ConcreteProduct - конкретный продукт: определяет объект - продукт, создаваемый соответствующей конкретной фабрикой, реализует интерфейс Abstract Product;
- Client - клиент: пользуется исключительно интерфейсами, которые объявлены в классах AbstractFactory и AbstractProduct.
- Обычно во время выполнения создается единственный экземпляр класса ConcreteFactory. Эта конкретная фабрика создает объекты продукты, имеющие вполне определенную реализацию. Для создания других видов объектов клиент должен воспользоваться другой конкретной фабрикой;
- AbstractFactory передоверяет создание объектов продуктов своему подклассу ConcreteFactory.
- фабрики как объекты, существующие в единственном экземпляре
- создание продуктов. Класс Abstract Factory объявляет только интерфейс для создания продуктов. Фактическое их создание – дело подклассов ConcreteProduct.
- определение расширяемых фабрик. Класс AbstractFactory обычно определяет разные операции для каждого вида изготавливаемых продуктов. Виды продуктов кодируются в сигнатуре операции. Для добавления нового вида продуктов нужно изменить интерфейс класса AbstractFactory и всех зависящих от него классов.
Паттерн абстрактная фабрика обладает следующими плюсами и минусами:
- Изолирует конкретные классы.
- Упрощает замену семейств продуктов.
- Гарантирует сочетаемость продуктов.
- Поддержать новый вид продуктов трудно.
