Паттерны проектирования. Порождающие шаблоны.

Фабричный метод, абстрактная фабрика, строитель, прототип. Фабричный метод Фабричный метод (виртуальный конструктор, factory method) — это порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов. Зачем? Отделяет код производства объектов от остального кода, который эти объекты использует. Позволяет расширять классы вашего фреймворка через наследование путем переопределения метода, создающего объекты. Позволяет экономить системные ресурсы путем повторного использования уже созданных объектов вместо порождения новых. Плюсы: 1. Избавляет главный класс от привязки к конкретным типам объектов. 2. Выделяет код производства объектов в одно место, упрощая поддержку кода. 3. Упрощает добавление новых типов объектов в программу. 4. Реализует принцип открытости/закрытости. Минусы: 1. Может привести к созданию больших параллельных иерархий классов, так как для каждого типа объекта надо создать свой подкласс создателя. Почему написано синим? 1. Записки заполняем синим, это правильно, но ключевые моменты выделяем красным. 2. В космосе записываем положительные результаты зеленым, отрицательные – красным. 3. На доске пишем основную информацию черным, ключевые моменты – красным. Абстрактная фабрика Абстрактная фабрика (Abstract Factory) — это порождающий паттерн проектирования, который позволяет создавать семейства связанных объектов, не привязываясь к конкретным классам создаваемых объектов. Плюсы: 1. Гарантирует «сочетаемость» создаваемых объектов. 2. Избавляет клиентский код от привязки к конкретным типам объектов. 3. Выделяет код производства объектов в одно место, упрощая поддержку кода. 4. Упрощает добавление новых типов объектов в программу. 5. Реализует принцип открытости/закрытости. Минусы: 1. Усложняет код программы из-за введения множества дополнительных классов. 2. Требует наличия всех типов объектов в каждой вариации. Строитель Строитель — это порождающий паттерн проектирования, который позволяет создавать сложные объекты пошагово. Строитель даёт возможность использовать один и тот же код строительства для получения разных представлений объектов. Когда задуматься? 1. Если у Вас есть один конструктор с десятью опциональными параметрами. Его неудобно вызывать, поэтому Вы создали ещё десять конструкторов с меньшим количеством параметров. Всё, что они делают — это переадресуют вызов к базовому конструктору, подавая какие-то значения по умолчанию в параметры, которые пропущены в них самих. 2. Если создание нескольких представлений объекта состоит из одинаковых этапов, которые отличаются в деталях. 3. Если Вам нужно собирать сложные составные объекты, например, деревья Компоновщика. Плюсы: 1. Позволяет создавать объекты пошагово. 2. Позволяет использовать один и тот же код для создания различных объектов. 3. Изолирует сложный код сборки объекта от его основной бизнес-логики. Минусы: 1. Усложняет код программы из-за введения дополнительных классов. 2. Клиент может оказаться привязан к конкретным классам строителей, так как в интерфейсе строителя может не быть метода получения результата. Прототип Прототип — это порождающий паттерн проектирования, который определяет механизм копирования объектов без погружения в подробности их реализации. Плюсы: 1. Позволяет клонировать объекты, не привязываясь к их конкретным классам. 2. Меньше повторяющегося кода инициализации объектов. 3. Ускоряет создание объектов. Минус: 1. Сложно клонировать составные объекты, имеющие ссылки на другие объекты.
Back to Top