Skip to content

Отношения Abstract Factory с другими паттернами

Многие архитектуры начинаются с применения фабричного метода (более простого и расширяемого через подклассы) и эволюционируют в сторону абстрактной фабрики, прототипа или строителя (более гибких, но при этом и более сложных паттернов).

Строитель концентрируется на построении сложных объектов шаг за шагом. Абстрактная фабрика специализируется на создании семейств связанных продуктов. Строитель возвращает продукт только после выполнения всех шагов, а абстрактная фабрика возвращает продукт сразу же.

Классы абстрактной фабрики чаще всего реализуются с помощью фабричного метода, хотя могут быть построены и на основе прототипа.

Абстрактная фабрика может быть использована вместо фФасада для того, чтобы скрыть платформозависимые классы.

Абстрактная фабрика может работать совместно с мостом. Это особенно полезно, если у тебя есть абстракции, которые работают только с некоторыми из реализаций. В этом случае фабрика будет определять типы создаваемых абстракций и реализаций.

Абстрактная фабрика, строитель и прототип могут быть реализованы при помощи одиночки.

Концептуальный пример

Представим, что тебе нужно купить спортивную форму, состоящую из двух разных вещей: пары обуви и футболки. Ты хочешь приобрести полный набор от одного бренда, чтобы вещи сочетались между собой.

Переводя вышесказанное в код, абстрактная фабрика поможет тебе создавать наборы продуктов, которые всегда будут подходить друг к другу.

iSportsFactory.go: интерфейс абстрактной фабрики

adidas.go: конкретная фабрика

nike.go: конкретная фабрика

iShoe.go: абстрактный продукт

adidasShoe.go: конкретный продукт

nikeShoe.go: конкретный продукт

iShirt.go: абстрактный продукт

adidasShirt.go: конкретный продукт

nikeShirt.go: конкретный продукт

main.go: клиентский код

Пришло время поработать с кодом!

output.txt: результат выполнения

С оригиналом статьи ты можешь ознакомиться по ссылке (может потребоваться VPN).