Введение

Абстрактная фабрика в разработке программного обеспечения — это шаблон проектирования, предоставляющий способ создания семейств связанных объектов без привязки к их конкретным классам, посредством инкапсуляции группы отдельных фабрик, объединенных общей темой, без указания их конкретных классов. В соответствии с этим шаблоном, клиентский программный компонент создает конкретную реализацию абстрактной фабрики, а затем использует общий интерфейс фабрики для создания конкретных объектов, входящих в семейство. Клиент не знает, какие конкретные объекты он получает от каждой из этих внутренних фабрик, поскольку использует только общие интерфейсы их продуктов. Использование этого шаблона позволяет заменять конкретные реализации без изменения кода, который их использует, даже во время выполнения. Однако применение этого шаблона, как и других подобных шаблонов проектирования, может привести к излишней сложности и дополнительной работе при первоначальном написании кода. Кроме того, более высокая степень разделения и абстракции может привести к системам, которые сложнее отлаживать и поддерживать.

Варианты

Первоначальная структура шаблона "абстрактная фабрика", как она определена в 1994 году в книге "Design Patterns", основана на абстрактных классах для абстрактной фабрики и абстрактных продуктов, которые предстоит создать. Конкретные фабрики и продукты – это классы, которые специализируют абстрактные классы посредством наследования. Более современная структура шаблона основана на интерфейсах, определяющих абстрактную фабрику и абстрактные продукты, которые должны быть созданы. Эта конструкция использует встроенную поддержку интерфейсов или протоколов в основных языках программирования, чтобы избежать использования наследования. В этом случае конкретные фабрики и продукты – это классы, которые реализуют интерфейс посредством его реализации.