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