1. Введение
В этой статье мы сосредоточимся на шаблонах структурного проектирования в Java и обсудим, что это такое, и некоторые фундаментальные различия между некоторыми из них.
2. Шаблоны структурного проектирования
Согласно Gang Of Four (GoF), шаблоны проектирования можно разделить на три типа:
- творческий
- Структурный
- Поведенческий
Проще говоря, структурные паттерны имеют дело с композицией классов и объектов. Они предоставляют различные способы использования композиции объектов и наследования для создания некоторой абстракции.
3. Шаблон прокси
С помощью этого шаблона мы создаем посредника, который действует как интерфейс к другому ресурсу , например, файлу, соединению. Этот вторичный доступ обеспечивает суррогат реального компонента и защищает его от основной сложности.
Подробный пример шаблона можно найти в специальном посте: The Proxy Pattern in Java .
Ключевые моменты дифференциации:
- Прокси-сервер предоставляет тот же интерфейс, что и объект, на который он ссылается, и никоим образом не изменяет данные; это в отличие от шаблонов адаптера и декоратора, которые изменяют и украшают функциональные возможности ранее существовавших экземпляров соответственно.
- Прокси обычно имеет информацию о реальном объекте во время самой компиляции, тогда как Декоратор и Адаптер внедряются во время выполнения, зная только фактический интерфейс объекта.
4. Шаблон декоратора
Этот шаблон полезен для улучшения поведения объекта. Подробный обзор можно найти в специализированном руководстве здесь: Шаблон декоратора в Java .
Ключевые моменты дифференциации:
- Хотя шаблоны Proxy и Decorator имеют схожую структуру, они различаются по назначению; в то время как основная цель прокси - облегчить использование или контролируемый доступ, декоратор накладывает дополнительные обязанности
- Шаблоны Proxy и Adapter содержат ссылку на исходный объект.
- Все декораторы из этого паттерна можно использовать рекурсивно, бесконечное количество раз, что невозможно с другими моделями.
5. Шаблон адаптера
Шаблон адаптера используется для соединения двух несовместимых интерфейсов, которые иначе нельзя соединить напрямую. Адаптер оборачивает существующий класс новым интерфейсом, чтобы он стал совместимым с необходимым интерфейсом.
Подробное описание и реализацию смотрите в специальном посте: Шаблон адаптера в Java .
Основные различия между шаблонами адаптера и прокси:
- В то время как прокси предоставляет тот же интерфейс, адаптер предоставляет другой интерфейс, совместимый с его клиентом.
- Шаблон адаптера используется после того, как компоненты приложения разработаны таким образом, чтобы мы могли использовать их без изменения исходного кода. Это отличается от шаблона Bridge, который используется до проектирования компонентов.
6. Шаблон моста
Шаблон моста используется для отделения абстракции от ее реализации , чтобы они могли меняться независимо друг от друга.
Это означает создание интерфейса-моста, который использует принципы ООП для разделения обязанностей на разные абстрактные классы.
Подробное описание и реализацию смотрите в специальном посте: Bridge Pattern in Java .
Ключевые моменты дифференциации :
- Шаблон моста может быть реализован только до разработки приложения.
- Позволяет абстракции и реализации изменяться независимо друг от друга, тогда как шаблон адаптера позволяет несовместимым классам работать вместе.
7. Заключение
В этой статье мы сосредоточились на шаблоне структурного проектирования и различиях между некоторыми его типами.
Как всегда, полную реализацию этого туториала можно найти на Github .