Паттерны проектирования можно обсуждать бесконечно. Основное их назначение в том, что они помогают новичкам и опытным программистам экономить время при разработке, минимизировать количество ошибок и, в целом, выглядеть более грамотным при разговорах с коллегами :)
Поэтому вместе с преподавателями Академии мы запускаем серию статей о паттернах. В первой части материала разбираемся, что такое паттерны проектирования, какими бывают и чем отличаются от архитектурных паттернов.
Другие статьи серии: «Порождающие паттерны», «Структурные паттерны» и «Поведенческие паттерны».
ЧТО ТАКОЕ ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ
Цельное представление о паттернах появилось в 1994 году после выхода нашумевшей книги «Приемы объектно-ориентированного программирования. Паттерны проектирования» от авторов, которых прозвали «Банда четырех».
В книге под паттерном понимается описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте.
Проще говоря, паттерны проектирования — это решения распространенных проблем при разработке кода. Также они известны как шаблоны проектирования, паттерны объектно-ориентированного программирования или design patterns. В отличие от готовых функций или библиотек, паттерн представляет собой не конкретный код, а общую концепцию решения проблемы, которую еще нужно подстроить под задачи.
Зачем знать паттерны?
- Проверенные решения. Вы тратите меньше времени, используя готовые решения, вместо изобретения велосипеда.
- Стандартизация кода. Вы делаете меньше просчетов при разработке, используя типовые решения, так как все возможные проблемы в них уже найдены.
- Общий программистский словарь. Вместо того, чтобы долго объяснять коллеге логику работы вашего кода, вы называете паттерн, который хотите использовать, и экономите свое и чужое время.
Какими бывают паттерны проектирования
Всего существует 23 классических паттерна, которые были описаны в книге «Банды четырех». В зависимости от того, какие задачи решают паттерны, они делятся на три вида — порождающие, структурные и поведенческие.
Порождающие предназначены для создания экземпляра объекта или группы связанных объектов. К ним относятся:
- Abstract Factory — Абстрактная фабрика
- Builder — Строитель
- Factory Method — Фабричный метод
- Prototype — Прототип
- Singleton — Одиночка
Структурные в основном связаны с композицией объектов, с тем, как сущности могут использовать друг друга. К ним относятся:
- Adapter — Адаптер
- Bridge — Мост
- Composite — Компоновщик
- Decorator — Декоратор
- Facade — Фасад
- Flyweight — Приспособленец
- Proxy — Заместитель
Поведенческие связаны с распределением обязанностей между объектами. Их отличие от структурных шаблонов заключается в том, что они описывают не только структуру, но и способы общения между ними. К ним относятся:
- Chain of responsibility — Цепочка обязанностей
- Command — Команда
- Interpreter — Интерпретатор
- Iterator — Итератор
- Mediator — Посредник
- Memento — Хранитель
- Observer — Наблюдатель
- State — Состояние
- Strategy — Стратегия
- Template method — Шаблонный метод
- Visitor — Посетитель
Паттерны проектирования vs. архитектурные паттерны — в чем разница
Новички могут спутать паттерны проектирования и архитектурные паттерны, так как обычно в разговоре разработчики называют и те, и другие просто паттернами. Давайте разберемся, в чем отличия.
Паттерны проектирования предоставляют решения для доработки и построения подсистем на уровне кода. Обычно на их выбор влияет язык программирования, а разработчик сам принимает решение, какой паттерн использовать.
Архитектурные паттерны (архитектурные шаблоны, architectural patterns) рассматриваются на более высоком уровне. Они определяет архитектуру приложения, задают его логику (на какие компоненты/модули будет делиться приложение и каким образом они взаимодействуют) и помогают разработчику понять, как устроен продукт внутри. Выбор паттернов происходит на этапе создания продукта.
Про многие из архитектурных паттернов вы, скорее всего, уже слышали. Например, клиент-серверная архитектура, шина событий, MVC или интерпретатор. Подробнее про самые популярные паттерны можно прочитать в статье.
Заключение
Паттерны проектирования — это решения распространенных проблем при разработке кода. Их знание и использование позволяет экономить время, используя готовые решения, стандартизировать код и повысить общий программистский словарь.
Основное отличие паттернов проектирования от архитектурных в том, что первые предоставляют решения на уровне кода. Обычно на их выбор влияет язык программирования, а разработчик сам принимает решение, какой паттерн использовать. Архитектурные паттерны определяют архитектуру приложения, задают его логику и помогают разработчику понять, как устроен продукт внутри.
В зависимости от того, какие задачи решают паттерны проектирования, они делятся на три вида: порождающие, структурные и поведенческие. В следующих статьях мы подробнее расскажем про каждый вид и разберем 9 самых популярных паттернов, которыми чаще всего пользуются программисты.
Материалы для дополнительного изучения
«Паттерны объектно-ориентированного программирования» Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес — та самая книга от авторов «Банды четырех».
Refactoring.guru — Электронная книга о паттернах и принципах проектирования
статьи по теме
-
ЧитатьОткрыт набор на подготовку к ЕГЭ и ОГЭ по математике, физике и информатике 2025 года22.08.2024
-
ЧитатьКак организовать переиспользование компонентов в React? Советы разработчиков MediaSoft08.08.2024
-
ЧитатьКак перейти с Java на Kotlin при создании веб-приложений? Ресурсы для начала изучения и мнения экспертов07.05.2024
-
ЧитатьMediaSoft Java Weekend — 4 доклада с презентациями для Java-разработчиков20.03.2024
-
ЧитатьЛайфхаки при использовании Java29.02.2024