Поиск по сайту:

Шаблоны проектирования Java — пример учебника


Введение

Шаблоны проектирования очень популярны среди разработчиков программного обеспечения. Шаблон проектирования — это хорошо описанное решение общей программной проблемы.

Некоторые из преимуществ использования шаблонов проектирования:

  1. Шаблоны проектирования уже определены и обеспечивают стандартный отраслевой подход к решению повторяющихся проблем, поэтому разумное использование шаблона проектирования экономит время. Существует множество шаблонов проектирования Java, которые мы можем использовать в наших проектах на основе Java.
  2. Использование шаблонов проектирования способствует повторному использованию, что приводит к созданию более надежного кода, который легко поддерживать. Это помогает снизить совокупную стоимость владения (TCO) программного продукта.
  3. Поскольку шаблоны проектирования уже определены, это упрощает понимание и отладку нашего кода. Это ускоряет разработку, и новые члены команды легко это понимают.

Шаблоны проектирования Java делятся на три категории: творческие, структурные и поведенческие шаблоны проектирования.

Эта статья служит указателем для всех статей о шаблонах проектирования Java.

Креативные шаблоны проектирования

Порождающие шаблоны проектирования предоставляют решения для создания экземпляра Object наилучшим образом для конкретных ситуаций.

1. Одноэлементный шаблон

Шаблон singleton ограничивает создание экземпляра Class и гарантирует, что только один экземпляр класса существует в виртуальной машине Java. Реализация одноэлементного шаблона всегда была спорной темой среди разработчиков.

Примечание. Узнайте больше о шаблоне проектирования Singleton.

2. Заводской узор

Шаблон проектирования factory используется, когда у нас есть суперкласс с несколькими подклассами, и на основе ввода нам нужно вернуть один из подклассов. Этот шаблон берет на себя ответственность за создание экземпляра Class из клиентской программы в класс фабрики. Мы можем применить одноэлементный шаблон к фабричному классу или сделать фабричный метод static.

Примечание. Узнайте больше о шаблоне проектирования Factory.

3. Абстрактная фабрика

Шаблон абстрактной фабрики похож на шаблон фабрики и представляет собой фабрику фабрик. Если вы знакомы с шаблоном проектирования фабрики в Java, вы заметите, что у нас есть один фабричный класс, который возвращает разные подклассы на основе предоставленных входных данных, а фабричный класс использует if-else или switch операторы для достижения этого. В шаблоне абстрактной фабрики мы избавляемся от блока if-else и создаем класс фабрики для каждого подкласса, а затем класс абстрактной фабрики, который возвращает подкласс на основе входного класса фабрики.

Примечание. Узнайте больше о шаблоне Abstract Factory.

4. Шаблон строителя

Шаблон построителя был введен для решения некоторых проблем с фабричными и абстрактными фабричными шаблонами проектирования, когда объект содержит много атрибутов. Этот шаблон решает проблему с большим количеством необязательных параметров и несогласованным состоянием, предоставляя способ пошагового построения объекта и предоставляя метод, который фактически возвращает окончательный Object.

Примечание. Узнайте больше о шаблоне Builder.

5. Образец прототипа

Шаблон прототипа используется, когда создание Object является дорогостоящим и требует много времени и ресурсов, а у вас уже есть аналогичный Object. Таким образом, этот шаблон предоставляет механизм для копирования исходного Object в новый Object и последующего изменения его в соответствии с нашими потребностями. Этот шаблон использует клонирование Java для копирования Object. Шаблон проектирования прототипа требует, чтобы Object, который вы копируете, обеспечивал функцию копирования. Это не должно быть сделано никаким другим классом. Однако то, использовать ли поверхностную или глубокую копию свойств объекта, зависит от требований и является проектным решением.

Примечание. Узнайте больше о шаблоне прототипа.

Шаблоны структурного проектирования

Шаблоны структурного проектирования предоставляют различные способы создания структуры Class (например, использование наследования и композиции для создания большого Object из небольших Object). .

1. Шаблон адаптера

Шаблон проектирования адаптера является одним из структурных шаблонов проектирования и используется для совместной работы двух несвязанных интерфейсов. Объект, соединяющий эти несвязанные интерфейсы, называется адаптером.

Примечание. Узнайте больше о шаблоне адаптера.

2. Композитный шаблон

Составной шаблон используется, когда нам нужно представить иерархию часть-целое. Когда нам нужно создать структуру таким образом, чтобы объекты в структуре обрабатывались одинаково, мы можем применить составной шаблон проектирования.

Примечание. Узнайте больше о составном шаблоне.

3. Шаблон прокси

Шаблон прокси предоставляет место для другого Object для управления доступом к нему. Этот шаблон используется, когда мы хотим предоставить контролируемый доступ к функциональности.

Примечание. Узнайте больше о шаблоне прокси.

4. Модель наилегчайшего веса

Шаблон проектирования легковеса используется, когда нам нужно создать множество Object класса Class. Поскольку каждый объект занимает место в памяти, которое может иметь решающее значение для устройств с малым объемом памяти (таких как мобильные устройства или встроенные системы), можно применить шаблон проектирования легковеса, чтобы уменьшить нагрузку на память путем совместного использования Объектs.

Реализация пула строк в Java — один из лучших примеров реализации шаблона легковеса.

Примечание. Узнайте больше о паттерне наилегчайшего веса.

5. Узор фасада

Шаблон фасада помогает клиентским приложениям легко взаимодействовать с системой.

Примечание. Узнайте больше о шаблоне фасада.

6. Шаблон моста

Когда у нас есть иерархия интерфейсов как в интерфейсах, так и в реализациях, тогда используется шаблон проектирования моста, чтобы отделить интерфейсы от реализации и скрыть детали реализации от клиентских программ. Реализация шаблона проектирования моста следует идее предпочтения композиции наследованию.

Примечание. Узнайте больше о шаблоне моста.

7. Шаблон декоратора

Шаблон проектирования декоратора используется для изменения функциональности объекта во время выполнения. В то же время другие экземпляры того же класса не будут затронуты этим, поэтому отдельный объект получает измененное поведение. Шаблон проектирования декоратора — это один из структурных шаблонов проектирования (например, шаблон адаптера, шаблон моста или составной шаблон), который использует для реализации абстрактные классы или интерфейс с композицией. Мы используем наследование или композицию для расширения поведения объекта, но это делается во время компиляции и применимо ко всем экземплярам класса. Мы не можем добавить какую-либо новую функциональность, чтобы удалить какое-либо существующее поведение во время выполнения — в этом случае полезен шаблон декоратора.

Примечание. Узнайте больше о шаблоне декоратора.

Шаблоны поведенческого проектирования

Поведенческие паттерны предлагают решение для лучшего взаимодействия между объектами и того, как обеспечить слабую связь и гибкость для легкого расширения.

1. Шаблон метода шаблона

Шаблон метода шаблона представляет собой поведенческий шаблон проектирования и используется для создания заглушки метода и передачи некоторых шагов реализации подклассам. Метод шаблона определяет шаги для выполнения алгоритма и может предоставить реализацию по умолчанию, которая может быть общей для всех или некоторых подклассов.

Примечание. Узнайте больше о шаблоне метода шаблона.

2. Паттерн посредника

Шаблон проектирования посредника используется для предоставления централизованной среды связи между различными объектами в системе. Если объекты взаимодействуют друг с другом напрямую, компоненты системы тесно связаны друг с другом, что повышает стоимость сопровождения и затрудняет гибкость для легкого расширения. Шаблон посредника фокусируется на предоставлении посредника между объектами для связи и реализации слабой связи между объектами. Посредник работает как маршрутизатор между объектами и может иметь свою собственную логику, обеспечивающую способ связи.

Примечание. Узнайте больше о шаблоне посредника.

3. Схема цепочки ответственности

Шаблон цепочки ответственности используется для достижения слабой связи в разработке программного обеспечения, когда запрос от клиента передается цепочке объектов для их обработки. Затем объект в цепочке решит, кто будет обрабатывать запрос и требуется ли отправить запрос следующему объекту в цепочке или нет.

Мы знаем, что у нас может быть несколько блоков catch в блочном коде try-catch. Здесь каждый блок catch является своего рода процессором для обработки этого конкретного исключения. Поэтому, когда в блоке try возникает исключение, оно отправляется для обработки в первый блок catch. Если блок catch не может его обработать, он перенаправляет запрос следующему Object в цепочке (т. е. следующему блоку catch). ). Если даже последний блок catch не может его обработать, исключение выбрасывается за пределы цепочки вызывающей программе.

Примечание. Узнайте больше о шаблоне цепочки ответственности.

4. Шаблон наблюдателя

Шаблон проектирования наблюдателя полезен, когда вас интересует состояние Object и вы хотите получать уведомления о любых изменениях. В шаблоне наблюдателя Object, который следит за состоянием другого Object, называется observer, а Object, который за которым наблюдают, называется subject.

Java предоставляет встроенную платформу для реализации шаблона наблюдателя через класс java.util.Observable и интерфейс java.util.Observer. Однако он не используется широко, потому что реализация ограничена, и в большинстве случаев мы не хотим в конечном итоге расширять класс исключительно для реализации шаблона наблюдателя, поскольку Java не обеспечивает множественного наследования в классах. Служба сообщений Java (JMS) использует шаблон наблюдателя вместе с шаблоном посредника, чтобы позволить приложениям подписываться и публиковать данные в других приложениях.

Примечание. Узнайте больше о шаблоне Observer.

5. Паттерн стратегии

Шаблон стратегии используется, когда у нас есть несколько алгоритмов для конкретной задачи, и клиент решает, какую фактическую реализацию использовать во время выполнения. Шаблон стратегии также известен как шаблон политики. Мы определяем несколько алгоритмов и позволяем клиентским приложениям передавать алгоритм для использования в качестве параметра.

Одним из лучших примеров этого шаблона является метод Collections.sort(), который принимает параметр Comparator. В зависимости от различных реализаций интерфейсов компараторов объекты сортируются по-разному.

Примечание. Узнайте больше о шаблоне стратегии.

6. Шаблон команды

Шаблон команды используется для реализации слабой связи в модели запрос-ответ. В этом шаблоне запрос отправляется вызывающему, а вызывающий передает его инкапсулированному объекту command. Объект команды передает запрос соответствующему методу получателя для выполнения определенного действия.

Примечание. Узнайте больше о шаблоне команды.

7. Образец состояния

Шаблон проектирования состояния используется, когда Object меняет свое поведение в зависимости от своего внутреннего состояния. Если нам нужно изменить поведение Object в зависимости от его состояния, мы можем иметь переменную состояния в Object и использовать if-else блок условия для выполнения различных действий в зависимости от состояния. Шаблон состояния используется для обеспечения систематического и слабосвязанного способа достижения этого посредством реализации контекста и состояния.

Примечание. Узнайте больше о шаблоне состояния.

8. Шаблон посетителя

Шаблон посетителя используется, когда нам нужно выполнить операцию над группой объектов подобного типа. С помощью шаблона посетителя мы можем перенести операционную логику из объектов в другой класс.

Примечание. Узнайте больше о шаблоне посетителя.

9. Шаблон интерпретатора

Шаблон интерпретатора используется для определения грамматического представления языка и предоставляет интерпретатор для работы с этой грамматикой.

10. Шаблон итератора

Шаблон итератора — это один из шаблонов поведения, который используется для предоставления стандартного способа обхода группы объектов. Шаблон итератора широко используется в Java Collection Framework, где интерфейс итератора предоставляет методы для обхода Collection. Этот шаблон также используется для предоставления различных типов итераторов в зависимости от наших требований. Шаблон итератора скрывает реальную реализацию обхода через Collection, а клиентские программы используют методы итератора.

Примечание. Узнайте больше о шаблоне итератора.

11. Памятный узор

Шаблон проектирования сувенира используется, когда мы хотим сохранить состояние объекта, чтобы мы могли восстановить его позже. Этот шаблон используется для реализации этого таким образом, что сохраненные данные состояния объекта недоступны за пределами Object, это защищает целостность сохраненных данных состояния.

Паттерн Memento реализован с двумя Objectсоздателем и смотрителем. Источником является Object, состояние которого необходимо сохранить и восстановить, и он использует внутренний класс для сохранения состояния Object. Внутренний класс называется \Memento и является приватным, поэтому к нему нельзя получить доступ из других объектов.

Разные шаблоны проектирования

Существует множество шаблонов проектирования, которые не подпадают под шаблоны проектирования Gang of Four. Давайте рассмотрим некоторые из этих популярных шаблонов проектирования.

1. Шаблон проектирования ДАО

Шаблон проектирования объекта доступа к данным (DAO) используется для отделения логики сохранения данных на отдельном уровне. DAO — очень популярный шаблон, когда мы проектируем системы для работы с базами данных. Идея состоит в том, чтобы отделить уровень сервиса от уровня доступа к данным. Таким образом мы реализуем разделение логики в нашем приложении.

Примечание. Узнайте больше о шаблоне DAO.

2. Шаблон внедрения зависимостей

Шаблон внедрения зависимостей позволяет нам удалить жестко закодированные зависимости и сделать наше приложение слабосвязанным, расширяемым и удобным в сопровождении. Мы можем реализовать внедрение зависимостей в Java, чтобы перенести разрешение зависимостей из времени компиляции во время выполнения. Фреймворк Spring построен по принципу внедрения зависимостей.

Примечание. Узнайте больше о шаблоне внедрения зависимостей.

3. Шаблон MVC

Шаблон Model-View-Controller (MVC) — один из старейших архитектурных шаблонов для создания веб-приложений.

Заключение

В этой статье обобщены шаблоны проектирования Java.

Вы можете ознакомиться с примером кода шаблонов проектирования Java в нашем репозитории GitHub.

Продолжите свое обучение с помощью дополнительных руководств по Java.