User Ivan Zaitsev
Ivan Zaitsev
33 уровень
Киев

Паттерны проектирования в Java [Часть 1]

Статья из группы Random
Это краткая статья по паттернам проектирования в Java. Реализации паттернов не будет, тут только список паттернов которые есть в java и их краткое содержание. Она будет полезна тем, кто уже в теме, для повторения и обобщения. Или напротив, для тех, кто первый раз подошёл к паттернам — для самого первого обзора темы, прежде, чем копнуть глубже. Паттерны проектирования (шаблоны проектирования) - это готовые к использованию решения часто возникающих в программировании задач. Это не класс и не библиотека, которую можно подключить к проекту, это нечто большее. Паттерны проектирования, подходящий под задачу, реализуется в каждом конкретном случае. Следует, помнить, что такой паттерн, будучи примененным неправильно или к неподходящей задаче, может принести немало проблем. Тем не менее, правильно примененный паттерн поможет решить задачу легко и просто. Паттерны проектирования в Java [Часть 1] - 1Типы паттернов:
  • порождающие
  • структурные
  • поведенческие
Порождающие паттерны предоставляют механизмы инициализации, позволяя создавать объекты удобным способом. Структурные паттерны определяют отношения между классами и объектами, позволяя им работать совместно. Поведенческие паттерны используются для того, чтобы упростить взаимодействие между сущностями. Порождающие:
  • Singleton (Одиночка) - ограничивает создание одного экземпляра класса, обеспечивает доступ к его единственному объекту.
  • Factory (Фабрика) - используется, когда у нас есть суперкласс с несколькими подклассами и на основе ввода, нам нужно вернуть один из подкласса.
  • Abstract Factory (Абстрактная фабрика) - используем супер фабрику для создания фабрики, затем используем созданную фабрику для создания объектов.
  • Builder (Строитель) - используется для создания сложного объекта с использованием простых объектов. Постепенно он создает больший объект от малого и простого объекта.
  • Prototype (Прототип) - помогает создать дублированный объект с лучшей производительностью, вместо нового создается возвращаемый клон существующего объекта.
Структурные:
  • Adapter (Адаптер) - это конвертер между двумя несовместимыми объектами. Используя паттерн адаптера, мы можем объединить два несовместимых интерфейса.
  • Composite (Компоновщик) - использует один класс для представления древовидной структуры.
  • Proxy (Заместитель) - представляет функциональность другого класса.
  • Flyweight (Легковес) - вместо создания большого количества похожих объектов, объекты используются повторно.
  • Facade (Фасад) - беспечивает простой интерфейс для клиента, и клиент использует интерфейс для взаимодействия с системой.
  • Bridge (Мост) - делает конкретные классы независимыми от классов реализации интерфейса.
  • Decorator (Декоратор) - добавляет новые функциональные возможности существующего объекта без привязки его структуры.
Поведенческие:
  • Template Method (Шаблонный метод) - определяющий основу алгоритма и позволяющий наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
  • Mediator (Посредник) - предоставляет класс посредника, который обрабатывает все коммуникации между различными классами.
  • Chain of Responsibility (Цепочка обязанностей) - позволяет избежать жесткой зависимости отправителя запроса от его получателя, при этом запрос может быть обработан несколькими объектами.
  • Observer (Наблюдатель) - позволяет одним обьектам следить и реагировать на события, происходящие в других объектах.
  • Strategy (Стратегия) - алгоритм стратегии может быть изменен во время выполнения программы.
  • Command (Команда) - интерфейс команды объявляет метод для выполнения определенного действия.
  • State (Состояние) - объект может изменять свое поведение в зависимости от его состояния.
  • Visitor (Посетитель) - используется для упрощения операций над группировками связанных объектов.
  • Interpreter (Интерпретатор) - определяет грамматику простого языка для проблемной области.
  • Iterator (Итератор) - последовательно осуществляет доступ к элементам объекта коллекции, не зная его основного представления.
  • Memento (Хранитель) - используется для хранения состояния объекта, позже это состояние можно восстановить.
Проходя курс JavaRush вы встретите пару паттернов из этого списка. Рекомендую задачи по паттернам: 1522, 1530, 1631, big01, 2912, 3107... Разумное использование паттернов проектирования приводит к повышению надежности обслуживания кода, поскольку в дополнение к тому, чтобы быть хорошим решением общей проблемы, паттерны проектирования могут быть распознаны другими разработчиками, что уменьшает время при работе с определенным кодом. Паттерны проектирования в Java [Часть 2]
Комментарии (13)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ СДЕЛАТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
N1k0 Уровень 22, Санкт-Петербург, Россия
5 июня 2021
Приглашаю в свой учебный репозиторий GitHub интересующихся патернами Java, реализовал в игровой форме все основные паттерны, буду рад критике и PullRequest'ам FantasyPatterns
Roman Afonin Уровень 35, Санкт-Петербург, Россия
1 июля 2019
https://refactoring.guru/ru/design-patterns/catalog тут ещё инфа есть
Андрей Маник Уровень 40, Нижний Новгород, Россия
16 марта 2018
По мотивам статьи сделал схемы, мне так удобнее запоминать, может кому-то еще пригодится


iOSif_StyleIN Уровень 26, Екатеринбург, Россия
4 марта 2018
Что-то похожее видел в интернете. Вот та самая статья с примерами https://habrahabr.ru/company/mailru/blog/325492/
Сергеев Виктор Уровень 40, Санкт-Петербург, Россия Master
17 февраля 2018
Как-то не совсем понятно, что они делают, зачем они и что они вообще такое. Может возьмете отдельный набор паттернов и покажите как им пользоваться на практике =)
Стас Пасинков Уровень 26, Киев, Украина Master
17 февраля 2018
мой любимый вопрос по паттернам - это что общего и какие отличия у паттернов: proxy, adapter, wrapper и decorator :)