# Фабричный метод

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

Паттерн **Фабричный Метод** определяет интерфейс создания объекта, но позволяет субклассам выбрать создаваемый экземпляр. Таким образом, Фабричный Метод делегирует операцию создания экземпляра субклассам.

## Принципы

- Код должен зависеть от абстракций, а не от конкретных классов

## Схемы

![scheme-1](scheme-1.png)

![scheme-2](scheme-2.png)

![scheme-3](scheme-3.png)

![scheme-4](scheme-4.png)

![scheme-5](scheme-5.png)

![scheme-6](scheme-6.png)
