Получите бесплатно 4 курса для лёгкого старта работы в IT
Получить бесплатно
Главная БлогПаттерны проектирования: какие бывают и как выбрать нужный
Создание сайта html

Паттерны проектирования: какие бывают и как выбрать нужный

Дата публикации: 08.07.2022
61 375
Время чтения: 16 минут
Дата обновления: 17.11.2024
В статье рассказывается:

В статье рассказывается:

  1. Что такое паттерн проектирования
  2. Отличие паттернов проектирования от схожих инструментов
  3. Основные виды паттернов проектирования
  4. Выбор подходящего паттерна проектирования
  5. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.
    Бесплатно от Geekbrains

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

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

Что такое паттерн проектирования

Термин «design patterns» можно перевести с английского как паттерны/шаблоны/образцы проектирования. Они применяются в процессе создания информационных систем и являются формализованными описаниями регулярно возникающих задач проектирования, эффективными решениями таких задач и рекомендациями по использованию полученных решений в тех или иных ситуациях.

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

Стоит отметить, что адекватное моделирование рассматриваемой предметной области выступает в качестве важнейшей начальной стадии в процессе работы с паттернами. Данный этап нужен не только для правильной (грамотно формализованной) постановки задачи, но и для определения подходящих паттернов.

Примером научного исследования, в котором описываются ключевые моменты построения модели анализа и модели проектирования, является работа Крэга Лармана — «Применение UML и паттернов проектирования».

Что такое паттерн проектирования
Что такое паттерн проектирования
Узнай, какие ИТ - профессии
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!

Скачивайте и используйте уже сегодня:

Павел Симонов - исполнительный директор Geekbrains
Павел Симонов
Исполнительный директор Geekbrains
pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

pdf 3,7mb
doc 1,7mb
Уже скачали 31969 pdf иконка

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

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

Комплекс паттернов проектирования можно смело назвать словарем разработчика. Это универсальное средство, позволяющее налаживать коммуникацию в процессе работы.

Отличие паттернов проектирования от схожих инструментов

Существует три основные разновидности паттернов:

  • архитектурные паттерны;
  • паттерны проектирования;
  • идиомы.

К первой категории относятся паттерны, которые представляют собой шаблоны высшего уровня. Они описывают структурную схему программной системы в целом. В этой схеме располагаются отдельные функциональные составляющие системы (подсистемы) и определяются отношения между ними.

В качестве примера архитектурного паттерна можно взять популярную программную парадигму «модель-представление-контроллер» (model-view-controller — MVC). При этом подсистемы содержат в себе архитектурные единицы более низкого уровня.

Отличие паттернов проектирования от схожих инструментов
Отличие паттернов проектирования от схожих инструментов

Вторая категория — паттерны проектирования. Они описывают схемы детализации программных подсистем и их отношений между собой. Такие паттерны никак не влияют на структуру программной системы в целом и не зависят от использования языка программирования.

Ярким примером являются паттерны GoF. Паттерны проектирования объектно-ориентированных систем — это описание взаимодействия объектов и классов, которые адаптированы для решения основной задачи проектирования в определенном контексте.

Идиомы представляют собой паттерны низкого уровня. Их предметная область — реализация той или иной проблемы с учётом специфики соответствующего языка программирования. Вид идиомы может быть различен в зависимости от того, к какому языку она применяется. В некоторых случаях идиома и вовсе не будет иметь никакого смысла.

Скажем, в C++ для борьбы с вероятными утечками памяти могут применяться интеллектуальные указатели. Каждый такой указатель отмечает участок динамически выделенной памяти, который будет в автоматическом режиме освобожден при выходе из зоны видимости. В рамках Java данной проблемы вообще нет. Дело в том, что этот язык использует автоматическую сборку мусора.

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

Только до 25.11
Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней
Список документов:
ТОП-100 площадок для поиска работы от GeekBrains
20 профессий 2023 года, с доходом от 150 000 рублей
Чек-лист «Как успешно пройти собеседование»
Чтобы получить файл, укажите e-mail:
Введите e-mail, чтобы получить доступ к документам
Подтвердите, что вы не робот,
указав номер телефона:
Введите телефон, чтобы получить доступ к документам
Уже скачали 52300

Основные виды паттернов проектирования

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

Порождающие (Creational)

Данные паттерны выделяют процесс инстанцирования. С помощью них система перестает зависеть от метода формирования композиции и представления объектов.

  • Прототип (Prototype). Такой шаблон задаёт типы создаваемых объектов посредством экземпляра-прототипа. Более того, копируя прототип, паттерн формирует новые объекты. При использовании этого шаблона вы сможете отойти от реализации и придерживаться принципа «программирование через интерфейсы». В роли возвращающего типа выступает указанный интерфейс/абстрактный класс на вершине иерархии. При этом классы-наследники могут подставить в это место наследника, выполняющего реализацию данного типа. Иными словами, прототип позволяет создать объект посредством клонирования, а не с помощью конструктора.
  • Factory (Фабрика). Это не считается паттерном в строгом смысле слова. Правильнее будет обозначить Factory как подход, в рамках которого логика создания объектов выносится в отдельный класс.
  • Фабричный метод (Factory Method). Шаблон, который определят общий интерфейс для формирования объектов в суперклассе. Данный метод даёт подклассам возможность изменять вид создаваемых объектов.
  • Абстрактная фабрика (Abstract factory). Это порождающий паттерн проектирования, который предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, без непосредственной спецификации их конкретных классов. Реализация такого шаблона обеспечивается за счёт создания абстрактного класса Factory. Этот класс выступает в качестве интерфейса для создания компонентов системы (скажем, применительно к оконному интерфейсу он может формировать окна и кнопки). После всего этого пишутся классы, которые реализуют данный интерфейс.
  • Одиночка (Singleton). Очередной порождающий паттерн. С помощью него обеспечивается наличие единственного экземпляра класса с глобальной точкой доступа в однопоточном приложении.
  • Строитель (Builder). Полезный порождающий паттерн, который, по сути, является методом создания составного объекта. Он дифференцирует сложный объект на конструирование и представление. Благодаря этому при выполнении одной и той же операции конструирования вы можете получить разные представления.
Основные виды паттернов проектирования
Основные виды паттернов проектирования

Структурные (Structural)

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

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

  • Мост (Bridge). Применяется в проектировании ПО. Он разделяет абстракцию и реализацию таким образом, чтобы они могли меняться независимо. Данный паттерн работает с помощью инкапсуляции, агрегирования и может применять наследование в целях распределения межклассовой ответственности.
  • Декоратор (Decorator). Данный шаблон был сформирован для динамического подключения дополнительного поведения к объекту. С его помощью практика создания подклассов получает гибкую альтернативу. Это позволяет сделать функционал более широким.
  • Адаптер (Adapter). Он необходим для организации применения функций объекта, который нельзя модифицировать, посредством специального интерфейса.
  • Компоновщик (Composite pattern). Такой шаблон способен объединять объекты в древовидную структуру. Это полезно для представления иерархии от частного к целому. Тем самым Composite pattern даёт клиентам возможность обращаться к отдельным объектам и к группам объектов одинаковым образом.
  • Заместитель (Proxy). Он предоставляет объект, контролирующий доступ к другому объекту, перехватывая при этом все вызовы. Иными словами, он выступает в качестве контейнера Фасад (Facade). Он помогает скрыть сложность системы. Принцип работы довольно прост: все возможные внешние вызовы сводятся к одному и тому же объекту, который передаёт эти вызовы соответствующим объектам системы.
  • Приспособленец (Flyweight, «легковесный (элемент)»). В процессе применения данного паттерна объект представляет себя как уникальный экземпляр в разных частях программы, однако, на самом деле это не так.
Основные виды паттернов проектирования
Основные виды паттернов проектирования

Поведенческие (behavioral)

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

  • Итератор (iterator). Это интерфейс, который даёт доступ к элементам коллекции (массива или контейнера), а также навигацию по ним. В зависимости от конкретной системы итераторы носят разные названия. Если говорить о системах управления, то это курсоры.
  • Интерпретатор (Interpreter). Он решает одну очень известную, но постоянно меняющуюся задачу. Альтернативное название — Little (Small) Language.
  • Цепочка обязанностей (Chain of responsibility). Такой шаблон нужен для организации уровней ответственности в системе.
  • Хранитель (Memento). С его помощью можно выполнить закрепление и сохранение внутреннего состояния объекта без нарушения инкапсуляции. Это нужно для того, чтобы в последующем можно было восстановить его в это самое состояние.
  • Команда (Command). Он представляет действие и применяется в рамках объектно-ориентированного программирования. Объект команды содержит в себе как само действие, так и его параметры.
  • Посредник (Mediator). Данный паттерн проектирования позволяет обеспечить взаимодействие нескольких объектов. В процессе этого создаётся слабая связанность и объекты избавляются от потребности в явных ссылках друг на друга.
  • Состояние (State). Применяется в ситуациях, когда в процессе выполнения программы объект должен изменять свое поведение, в зависимости от того, в каком состоянии он находится.
  • Наблюдатель (Observer). Его также называют «подчинённые» (Dependents). Формирует особый механизм у класса, который даёт возможность экземпляру объекта этого класса получать уведомления от остальных объектов. В оповещения содержится информация об изменении их состояния. Таким образом, происходит наблюдение за объектом.
  • Посетитель (visitor). Отвечает за описание операции, которая выполняется над объектами остальных классов. Если внести изменения в visitor, то вам не придётся корректировать обслуживаемые классы.
  • Стратегия (Strategy). Этот шаблон необходим для того, чтобы определять семейства алгоритмов и инкапсуляции каждого из них. Кроме того, данный паттерн позволяет обеспечить их взаимозаменяемость. Благодаря этому появляется возможность подбора алгоритма посредством определения соответствующего класса. С помощью Strategy можно изменять применяемый алгоритм вне зависимости от использующих его объектов-клиентов.
  • Шаблонный метод (Template method). Определяет «фундамент» алгоритма и даёт наследникам возможность переопределять те или иные шаги алгоритма, оставляя его общую структуру нетронутой.

Выбор подходящего паттерна проектирования

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

Готовы создать уникальные пространства, которые олицетворяют стиль и функциональность? Знакомство с дизайном интерьеров начинается с нашего курса. Изучите принципы проектирования и оформления помещений, научитесь работать с профессиональными инструментами: ArchiCAD, 3D Maxs, Photoshop, InDesign. Станьте дизайнером интерьеров, о котором мечтают клиенты.

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

Выбор подходящего паттерна проектирования
Выбор подходящего паттерна проектирования
Дарим скидку от 60%
на курсы от GeekBrains до 24 ноября
Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей
Забронировать скидку

Таким образом, разработчик должен хорошо понимать абстрактную организацию паттерна и все его конкретные реализации, так как в некоторых случаях они различаются для одного и того же шаблона. Чем больше вы будете работать с теми или иными реализациями, тем глубже сможете понять смысл конкретного шаблона. Однако если вы не можете с ним разобраться, то лучше отказаться от применения. Это касается даже тех ситуаций, когда создаётся впечатление, будто он является крайне полезным для вас.

В заключении хочется напомнить базовое правило: старайтесь сделать код как можно более простым и понятным. В противном случае шаблоны проектирования не принесут вам никакой пользы.
Оцените статью:
2.14
Добавить комментарий

Сортировать:
По дате публикации
По рейтингу
  1. Аноним

    В заголовке «как выбрать нужный», а по итогу о том как выбирать, написан 2 абзаца

    9
    2
    Ответить
Читайте также
prev
next
Бесплатные вебинары:
prev
next
Как работает дизайн-студия на примере одного кейса 

Как работает дизайн-студия на примере одного кейса 

Узнать подробнее
Инновационные подходы к обучению информационным технологиям

Инновационные подходы к обучению информационным технологиям

Узнать подробнее
Как стать Python-разработчиком

Как стать Python-разработчиком

Узнать подробнее
Что нужно знать разработчику

Что нужно знать разработчику

Узнать подробнее
Кто такой тестировщик и как им стать

Кто такой тестировщик и как им стать

Узнать подробнее
Чем занимается программист и как им стать

Чем занимается программист и как им стать

Узнать подробнее
Как искусственный интеллект помогает и мешает задачам кибербезопасности

Как искусственный интеллект помогает и мешает задачам кибербезопасности

Узнать подробнее
Бесплатный вебинар про внедрение искусственного интеллекта

Бесплатный вебинар про внедрение искусственного интеллекта

Узнать подробнее
Какие есть профессии в ИТ

Какие есть профессии в ИТ

Узнать подробнее
Смените профессию,
получите новые навыки,
запустите карьеру
Поможем подобрать обучение:
Забрать подарок

Получите подробную стратегию для новичков на 2023 год, как с нуля выйти на доход 200 000 ₽ за 7 месяцев

Подарки от Geekbrains из закрытой базы:
Осталось 17 мест

Поздравляем!
Вы выиграли 4 курса по IT-профессиям.
Дождитесь звонка нашего менеджера для уточнения деталей

Иван Степанин
Иван Степанин печатает ...