Андрей Матков
Logrocon, руководитель группы разработки.
Краткое содержание:
Структурные паттерны проектирования.
Эти паттерны отвечают за построение удобных в поддержке иерархий классов:
- адаптер;
- мост;
- фасад;
- декоратор.
Адаптер. Суть паттерна.
Позволяет объектам с несовместимыми интерфейсами работать вместе.
Адаптер. Структура.
Клиент – класс, который содержит существующую бизнес-логику программы.
Адаптер – класс, который может одновременно работать и с клиентом, и с сервисом. Он реализует клиентский интерфейс и содержит ссылку на объект сервиса.
Клиентский интерфейс – описывает протокол, через который клиент может работать с другими классами.
Сервис – класс, обычно сторонний. Клиент не может использовать этот класс напрямую, так как сервис имеет непонятный ему интерфейс.
Адаптер. Применимость.
Когда вы хотите использовать сторонний класс, но его интерфейс не соответствует остальному коду приложения.
Когда нужно использовать несколько существующих подклассов, но в них не хватает какой-то общей функциональности, причём расширить суперкласс вы не можете.
Адаптер. Преимущества и недостатки.
Мост.
Разделяет один или несколько классов на две отдельные иерархии — абстракцию и реализацию, позволяя изменять их независимо друг от друга.
Мост. Структура.
Абстракция - содержит управляющую логику. Код абстракции делегирует реальную работу связанному объекту реализации.
Расширенные абстракции - содержат различные вариации управляющей логики.
Клиент - работает только с объектами абстракции.
Реализация - задаёт общий интерфейс для всех реализаций. Все методы, которые здесь описаны, будут доступны из класса абстракции и его подклассов.
Конкретные реализации - содержат платформо-зависимый код.
Мост. Применимость.
Когда необходимо разделить монолитный класс, который содержит несколько различных реализаций какой-то функциональности (например, если класс может работать с разными системами баз данных)
Когда класс нужно расширять в двух независимых плоскостях
Когда необходимо изменять реализацию во время выполнения программы
Мост. Преимущества и недостатки.
Недостатки:
Усложняет код программы из-за введения дополнительных классов.
Фасад.
Предоставляет простой интерфейс к сложной системе классов, библиотеке или фреймворку.
Фасад. Структура.
Клиент - использует фасад вместо прямой работы с объектами сложной подсистемы.
Фасад - предоставляет быстрый доступ к определённой функциональности подсистемы. Он «знает», каким классам нужно переадресовать запрос, и какие данные для этого нужны.
Сложная подсистема - состоит из множества разнообразных классов. Для того, чтобы заставить их что-то делать, нужно знать подробности устройства подсистемы, порядок инициализации объектов и так далее.
Дополнительный фасад - можно ввести, чтобы не «захламлять» единственный фасад разнородной функциональностью. Он может использоваться как клиентом, так и другими фасадами.
Фасад. Применимость.
Когда нужно представить простой или урезанный интерфейс к сложной подсистеме.
Когда надо уменьшить количество зависимостей между клиентом и сложной системой. Фасадные объекты позволяют отделить, изолировать компоненты системы от клиента и развивать и работать с ними независимо.
Когда вы хотите разложить подсистему на отдельные слои.
Фасад. Преимущества и недостатки.
Декоратор.
Позволяет динамически добавлять объектам новую функциональность, оборачивая их в полезные «обёртки».
Декоратор. Структура.
Компонент - задаёт общий интерфейс обёрток и оборачиваемых объектов.
Конкретный компонент - определяет класс оборачиваемых объектов. Он содержит какое-то базовое поведение, которое потом изменяют декораторы.
Клиент - может оборачивать простые компоненты и декораторы в другие декораторы, работая со всеми объектами через общий интерфейс компонентов.
Базовый декоратор - хранит ссылку на вложенный объект-компонент.
Конкретные декораторы - различные вариации декораторов, которые содержат добавочное поведение.
Декоратор. Применимость.
Когда вам нужно добавлять функциональность объектам на лету, незаметно для кода, который их использует.
Когда нельзя расширить функциональность объекта с помощью наследования.
Декоратор. Преимущества и недостатки.
Заместитель.
Позволяет подставлять вместо реальных объектов специальные объекты-заменители.
Заместитель. Структура.
Клиент - работает с объектами через интерфейс сервиса. Благодаря этому, ему можно «подсунуть» объект заместителя.
Заместитель - хранит ссылку на объект сервиса. После того как заместитель заканчивает свою работу, он передаёт вызовы вложенному сервису. Заместитель может сам отвечать за создание и удаление объекта сервиса.
Интерфейс - сервиса определяет общий интерфейс для сервиса и заместителя. Благодаря этому, объект заместителя можно использовать там, где ожидается объект сервиса.
Сервис - содержит полезную бизнес-логику.
Заместитель. Преимущества и недостатки.
Спасибо за внимание! :)
1 view
1
0
7 months ago 00:23:30 1
[S02E07] Проектирование генератора уникальных ИД в распределённых системах| BookClub DOTNET
7 months ago 00:58:38 1
Минимальный уровень python для первой работы
7 months ago 00:13:04 1
Как Я учил Data Science
7 months ago 00:45:30 3
Алексей Корюкин — Что нового в интерфейсе ОС Аврора 5: управление и паттерны взаимодействия
7 months ago 00:44:20 1
Раз архитектура — «as Code», почему бы её не покрыть тестами?! Руслан Сафин.
7 months ago 00:34:22 1
PYTHON )))))
7 months ago 00:48:36 1
Паттерны проектирования общения сказать, что ты думаешь, так, чтобы от тебя не разбежались/Д.Вьюнова
7 months ago 00:10:19 1
Паттерны проектирования - Введение в тему [RU, Android] / Мобильный разработчик
7 months ago 00:36:55 1
Пробное Middle C# собеседование (мок-интервью)
7 months ago 00:01:25 1
Шоурил 2021 | Студия Артемия Лебедева
8 months ago 00:47:42 5
[S02E06] Проектирование хранилища типа “ключ-значение“ | BookClub DOTNET
8 months ago 00:15:40 1
Что такое архитектура приложения. Паттерны MVC, MVP, MVVM.
8 months ago 00:27:05 1
Шаблоны Java. Декоратор (Decorator / Wrapper)
8 months ago 00:19:36 1
Шаблоны Java. Строитель (Builder)
8 months ago 00:08:18 1
Шаблоны Java. Прототип (Prototype)
8 months ago 00:39:38 1
Паттерны проектирования. Порождающие шаблоны.
8 months ago 01:11:31 1
Паттерны проектирования. Поведенческие шаблоны.
8 months ago 01:29:37 1
Паттерны проектирования. Вводное занятие.
8 months ago 00:53:28 1
Паттерны проектирования. Структурные шаблоны.
8 months ago 00:20:09 1
Топ популярных вопросов на техническом собеседовании | Java Junior Middle | Распространенные вопросы
8 months ago 00:04:05 3
рассказываю простыми словами о паттернах проектирования: Singletone, метод фабрики, наблюдатель
8 months ago 00:09:54 1
Пять полезных онлайн сервисов для веб-разработчика #5
8 months ago 00:31:34 1
Объекты в JavaScript. Основы для начинающих. Синтаксис, создание, изменение. Уроки JavaScript с нуля
8 months ago 00:06:32 1
C++. Паттерн проектирования программ “ Мост (Bridge)“.