JavaRush/Java блог/Random/Паттерны проектирования в Java [Часть 1]
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]
Комментарии (15)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Perl Developer Perl Developer
14 июля 2022, 07:24
N1k0
Уровень 22
5 июня 2021, 00:49
Приглашаю в свой учебный репозиторий GitHub интересующихся патернами Java, реализовал в игровой форме все основные паттерны, буду рад критике и PullRequest'ам FantasyPatterns
Roman Afonin Full Stack Developer в АО "Окенит"
1 июля 2019, 14:27
https://refactoring.guru/ru/design-patterns/catalog тут ещё инфа есть
Андрей Маник
Уровень 40
16 марта 2018, 08:12
По мотивам статьи сделал схемы, мне так удобнее запоминать, может кому-то еще пригодится


Александр
Уровень 35
30 августа 2018, 11:06
Спасибо тебе!
Grimit
Уровень 26
14 октября 2019, 18:31
Спасибо!
Roman Robert
Уровень 32
23 февраля 2023, 16:01
Спасибо!
iOSif_StyleIN Android Developer в Уральский процессинг
4 марта 2018, 05:59
Что-то похожее видел в интернете. Вот та самая статья с примерами https://habrahabr.ru/company/mailru/blog/325492/
Сергеев Виктор
Уровень 40
Master
17 февраля 2018, 16:32
Как-то не совсем понятно, что они делают, зачем они и что они вообще такое. Может возьмете отдельный набор паттернов и покажите как им пользоваться на практике =)
Ivan Zaitsev Java Developer
17 февраля 2018, 16:43
В этой статье говорится какие существуют паттерны и краткое описание. Можно бы было ещё добавить примеры но так как паттернов приличное количество думаю тему нужно разделить на 3 поста.
Сергеев Виктор
Уровень 40
Master
17 февраля 2018, 16:58
будет здорово, если выделите самые популярные, практичные, опишите как ими пользоваться, когда применять, как они помогают в разработке больших и маленьких проектов.
Doctor John Zoidberg
Уровень 15
14 апреля 2019, 05:46
Скачайте книгу "Head First. Паттерны проектирования" или "Приемы объектно-ориентированного проектирования. Паттерны проектирования". Там вы найдете исчерпывающие примеры. Эти книги являются фундаментальными
Сергеев Виктор
Уровень 40
Master
14 апреля 2019, 11:24
если я сказаю книгу, то зачем эта статья? )
Стас Пасинков Software Developer в Zipy Master
17 февраля 2018, 16:13
мой любимый вопрос по паттернам - это что общего и какие отличия у паттернов: proxy, adapter, wrapper и decorator :)
Сергеев Виктор
Уровень 40
Master
17 февраля 2018, 16:31
Попробую ответить я: Адаптер это когда нам надо китайскую вилку воткнуть в европейскую розетку, используем адаптер. Прокси, это фильтр (удлинитель с кнопкой). От главной розетки питание может и идет, но прокси решает подавать писание к прибору или нет. При этом фильтр может быть спрятан от глаз пользователя. Варпер и декоратор (различи между ними не вижу), Добавляют новые плюшки поверх чего-то. Сет сложно пример из жизни привести, из java это Reader оборачивающий Input\OutputStream