Отношения 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).