Абстрактная фабрика предоставляет интерфейс, позволяющий порождать семейства объектов c заданными интерфейсами. При этом их реализации могут варьироваться. Данный шаблон используется в случае, если: Обратите внимание, клиентский код использует в работе только интерфейсы. Реализации Абстрактной фабрики и порождаемых ею объектов скрыты. Такой подход уменьшает зависимости между объектами и повышает гибкость, за счет возможности изменения реализаций. Часто можно увидеть совместное использование Абстрактной фабрики с другими шаблонами: Реализация шаблона в общем виде Примеры реализации Вначале создадим интерфейс IEngine, являющийся абстрактным представлением выпускаемого заводом двигателя. Интерфейс имеет единственный виртуальный метод ReleaseEngine(); Далее создадим конкретный класс японского двигателя JapaneseEngine, реализующий интерфейс IEngine и создадим класс российского двигателя RussianEngine, так же реализующий этот интерфейс. На производстве будут выпускаться автомобили, которые б