Слайд 2Назначение паттерна
Когда надо применять паттерн:
Заранее неизвестно, объекты каких типов необходимо создавать
Система должна
![Назначение паттерна Когда надо применять паттерн: Заранее неизвестно, объекты каких типов необходимо](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-1.jpg)
быть независимой от процесса создания новых объектов, а также быть расширяемой: можно легко вводить новые классы, объекты которых надо создавать
Когда создание новых объектов необходимо делегировать из базового класса классам наследникам
Делегирование — когда часть работы класс "перекладывает" на другие классы.
Слайд 3Общее описание
Фабричный метод (Factory Method) - это паттерн, который определяет интерфейс для
![Общее описание Фабричный метод (Factory Method) - это паттерн, который определяет интерфейс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-2.jpg)
создания объектов некоторого класса, но непосредственное решение о том, объект какого класса создавать происходит в подклассах.
В момент создания наследники могут определить, какой класс создавать.
Слайд 4UML Диаграмма
Product — определяет интерфейс объектов, создаваемых абстрактным методом
ConcreteProduct — реализует интерфейс
![UML Диаграмма Product — определяет интерфейс объектов, создаваемых абстрактным методом ConcreteProduct —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-3.jpg)
Product
Creator — объявляет фабричный метод, возвращающий объект типа Product. Может вызывать фабричный метод для создания объекта типа Product.
ConcreteCreator — переопределяет фабричный метод таким образом, чтобы он создавал и возвращал объект класса ConcreteProduct.
Слайд 5Реализация паттерна C#
Абстрактный класс Product определяет интерфейс класса, объекты которого надо создавать
Конкретные
![Реализация паттерна C# Абстрактный класс Product определяет интерфейс класса, объекты которого надо](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-4.jpg)
классы ConcreteProductA и ConcreteProductB представляют реализацию класса Product.
Абстрактный класс Creator определяет абстрактный фабричный метод FactoryMethod(), который возвращает объект Product.
Конкретные классы ConcreteCreatorA и ConcreteCreatorB - наследники класса Creator, определяющие свою реализацию метода FactoryMethod().
Слайд 6Реализация паттерна C#
Для каждого конкретного класса продукта определяется свой конкретный класс создателя.
Класс
![Реализация паттерна C# Для каждого конкретного класса продукта определяется свой конкретный класс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-5.jpg)
Creator делегирует создание объекта Product своим наследникам. А классы ConcreteCreatorA и ConcreteCreatorB могут самостоятельно выбирать какой конкретный тип продукта им создавать.
Слайд 7Последствия применения паттерна
Применение паттерна позволяет использовать в коде программы не конкретные классы,
![Последствия применения паттерна Применение паттерна позволяет использовать в коде программы не конкретные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-6.jpg)
а манипулировать абстрактными объектами на более высоком уровне.
Слайд 8Достоинства и недостатки
Паттерн позволяет сделать код создания объектов более универсальным, не привязываясь
![Достоинства и недостатки Паттерн позволяет сделать код создания объектов более универсальным, не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/1160443/slide-7.jpg)
к конкретным классам (ConcreteProduct), а оперируя лишь общим интерфейсом (Product), а также позволяет установить связь между параллельными иерархиями классов.
Недостатком же является необходимость создавать наследника Creator для каждого нового типа продукта (ConcreteProduct).