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