Введение
Абстрактная фабрика в разработке программного обеспечения — это шаблон проектирования, предоставляющий способ создания семейств связанных объектов без привязки к их конкретным классам, посредством инкапсуляции группы отдельных фабрик, объединенных общей темой, без указания их конкретных классов. В соответствии с этим шаблоном, клиентский программный компонент создает конкретную реализацию абстрактной фабрики, а затем использует общий интерфейс фабрики для создания конкретных объектов, входящих в семейство. Клиент не знает, какие конкретные объекты он получает от каждой из этих внутренних фабрик, поскольку использует только общие интерфейсы их продуктов. Использование этого шаблона позволяет заменять конкретные реализации без изменения кода, который их использует, даже во время выполнения. Однако применение этого шаблона, как и других подобных шаблонов проектирования, может привести к излишней сложности и дополнительной работе при первоначальном написании кода. Кроме того, более высокая степень разделения и абстракции может привести к системам, которые сложнее отлаживать и поддерживать.
The abstract factory pattern in software engineering is a design pattern that provides a way to create families of related objects without imposing their concrete classes, by encapsulating a group of individual factories that have a common theme without specifying their concrete classes. According to this pattern, a client software component creates a concrete implementation of the abstract factory and then uses the generic interface of the factory to create the concrete objects that are part of the family. The client does not know which concrete objects it receives from each of these internal factories, as it uses only the generic interfaces of their products. Use of this pattern enables interchangeable concrete implementations without changing the code that uses them, even at runtime. However, employment of this pattern, as with similar design patterns, may result in unnecessary complexity and extra work in the initial writing of code. Additionally, higher levels of separation and abstraction can result in systems that are more difficult to debug and maintain.
Варианты
Первоначальная структура шаблона "абстрактная фабрика", как она определена в 1994 году в книге "Design Patterns", основана на абстрактных классах для абстрактной фабрики и абстрактных продуктов, которые предстоит создать. Конкретные фабрики и продукты – это классы, которые специализируют абстрактные классы посредством наследования. Более современная структура шаблона основана на интерфейсах, определяющих абстрактную фабрику и абстрактные продукты, которые должны быть созданы. Эта конструкция использует встроенную поддержку интерфейсов или протоколов в основных языках программирования, чтобы избежать использования наследования. В этом случае конкретные фабрики и продукты – это классы, которые реализуют интерфейс посредством его реализации.