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

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

Дмитрий Бахтенков

Что такое паттерны?

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

Почему мы должны ими пользоваться?

При проектировании и написании программ мы можем встретиться с определёнными проблемами. Чтобы их решить, можно формализовать проблему в виде классов, объектов и связей между ними и подобрать подходящий шаблон проектирования. У такого подхода есть несколько преимуществ:

  • Не надо придумывать "костыли" и "велосипеды". Паттерн - это всего лишь шаблон, который мы можем подстроить под определённую проблему. Такие шаблоны уже давно придуманы за нас и являются хорошей практикой программирования.
  • Использование паттернов упрощает групповую разработку программ. Зная применяемый шаблон проектирования и его основные принципы, другой программист сможет легко разобраться в его реализации и понять ваш говнокод.

А когда не использовать?

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

Типы паттернов

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

Порождающие паттерны

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

Поведенческие паттерны

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

Структурные паттерны

Структурные паттерны определяют, как классы и объекты образуют более крупные структуры - более сложные классы и объекты.

Как выбрать нужный паттерн?

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

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

3.2 Если нам нужно объединить функционал множества объектов - попробуйте структурные паттерны.

3.3 Если вам необходимо гибко определять поведение программы или её модулей (классов, объектов) - тут вам могут помочь поведенческие паттерны.

Не используйте только один единственный паттерн - попробуйте разные, чтобы выявить наилучшее решение проблемы.

Что почитать?

Для любителей статей покороче:

Для любителей книг:


Report Page