… подождите, пожалуйста, минутку, я сейчас только запишу…
… ЦУП, я уже записываю…
… разность потенциалов в точке p…
Для каждого типа пишущего устройства свой метод, создающий устройства через new?
public void Write(string text)
{
var device = new Pen/Pencil/Marker/…();
device.Write();
}
Фабричный метод
Фабричный метод (виртуальный конструктор, factory method) — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
Зачем?
Отделяет код производства объектов от остального кода, который эти объекты использует.
Позволяет расширять классы вашего фреймворка через наследование путем переопределения метода, создающего объекты.
Позволяет экономить системные ресурсы путем повторного использования уже созданных объектов вместо порождения новых.
Плюсы vs. Минусы
Плюсы:
Избавляет главный класс от привязки к конкретным типам объектов.
Выделяет код производства объектов в одно место, упрощая поддержку кода.
Упрощает добавление новых типов объектов в программу.
Реализует принцип открытости/закрытости.
Минусы:
Может привести к созданию больших параллельных иерархий классов, так как для каждого типа объекта надо создать свой подкласс создателя.
Почему написано синим?
Записки заполняем синим, это правильно, но ключевые моменты выделяем красным.
В космосе записываем положительные результаты зеленым, отрицательные – красным.
На доске пишем основную информацию черным, ключевые моменты – красным.
Абстрактная фабрика
Абстрактная фабрика (Abstract Factory) — это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов.
Плюсы vs. Минусы
Плюсы:
Гарантирует «сочетаемость» создаваемых объектов.
Избавляет клиентский код от привязки к конкретным типам объектов.
Выделяет код производства объектов в одно место, упрощая поддержку кода.
Упрощает добавление новых типов объектов в программу.
Реализует принцип открытости/закрытости.
Минусы:
Усложняет код программы из-за введения множества дополнительных классов.
Требует наличия всех типов объектов в каждой вариации.
Строитель
Строитель — это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. Строитель даёт возможность использовать один и тот же код строительства для получения разных представлений объектов.
Когда задуматься?
Если у Вас есть один конструктор с десятью опциональными параметрами. Его неудобно вызывать, поэтому Вы создали ещё десять конструкторов с меньшим количеством параметров. Всё, что они делают — это переадресуют вызов к базовому конструктору, подавая какие-то значения по умолчанию в параметры, которые пропущены в них самих.
Если создание нескольких представлений объекта состоит из одинаковых этапов, которые отличаются в деталях.
Если Вам нужно собирать сложные составные объекты, например, деревья Компоновщика.
Плюсы vs. Минусы
Плюсы:
Позволяет создавать объекты пошагово.
Позволяет использовать один и тот же код для создания различных объектов.
Изолирует сложный код сборки объекта от его основной бизнес-логики.
Минусы:
Усложняет код программы из-за введения дополнительных классов.
Клиент может оказаться привязан к конкретным классам строителей, так как в интерфейсе строителя может не быть метода получения результата.
Создадим клона, вырастим его, обучим и будем надеяться, что выйдет похоже на оригинал
Нам нужно быстро, много и, самое главное, абсолютно идентично оригиналу
Прототип
Прототип — это порождающий паттерн проектирования, который определяет механизм копирования объектов без погружения в подробности их реализации.
Плюсы vs. Минусы
Плюсы:
Позволяет клонировать объекты, не привязываясь к их конкретным классам.
Меньше повторяющегося кода инициализации объектов.
Ускоряет создание объектов.
Минусы:
Сложно клонировать составные объекты, имеющие ссылки на другие объекты.