Среди людей, которые хотя бы минимально знакомы с серией Head First, есть немало тех, кто считает подобную литературу довольно поверхностным чтивом для новичков. Что сказать, глубоко изучить сложную тему из области программирования за 48 часов вряд ли получится. Однако сложно поспорить, что книга “Паттерны проектирования” — книга, которая будет полезным пособием по программированию для начинающих. Данная книга входит в десятку самых популярных на Stackoverflow, и небезосновательно. Легкость подачи, фундаментальная тема и качественные примеры делают книгу востребованной и сейчас и, на мой взгляд, еще на протяжении многих лет. Обзор книги “Паттерны проектирования” (Head First Design Patterns) - 1

Особенности книги

Head first design patterns рассказывает нам, что такое паттерны, как ими пользоваться и как ими думать. Паттерн — это шаблон, универсальное решение для определенного набора задач. Паттерны проектирования — это, в свою очередь, часто используемые архитектурные решения, с помощью которых можно писать удобные и гибкие приложения. Разработчики по всему миру решают одинаковые задачи с одинаковыми подходами. Как говорится в аннотации, если вы не хотите изобретать велосипед, используйте готовые шаблоны (паттерны) проектирования, работе с которыми посвящена эта книга. Отдельно стоит отметить подачу материала: книги серии Head First славятся своей простотой и читаются на одном дыхании. “Паттерны проектирования” — не исключение. В ней также соблюдены ключевые принципы:
  1. Наглядность
  2. Разговорный стиль изложения
  3. Большое количество иллюстраций
  4. Активное участие читателя
  5. Обращение к эмоциям
  6. Привлечение внимания читателя
Авторы книги грамотно используют теорию метапознания для изложения материала: для меня первые 100 страниц пролетели незаметно. Вся прелесть подхода в том, что мозг действительно запоминает прочитанное. Совмещение нескольких стилей повествования, интересные вопросы, избыточность и креатив — все это помогает читателю не утратить интерес к главной теме. Перед покупкой книги я сомневался, читая неоднозначные рецензии. Однако бегло пролистав несколько других источников по этой теме, принял решение: чтобы погрузиться в паттерны, эта книга — то, что нужно.

Основная тема и ключевая мысль

“Наверняка вашу задачу кто-то уже решал” — так начинается первая глава книги, передавая весь смысл паттернов проектирования в программировании. Основная цель — правильно донести читателю их смысл, ведь в первую очередь программист должен знать, для чего нужны паттерны и в какой момент их необходимо применить. По сути, сначала шаблоны нужно разложить по полочкам у себя в голове, и только после этого внедрять их в программы. Если новичок в программировании разбирается в паттернах “на троечку”, их использование может сильно усложнить код (а должно упрощать!). На вопрос “Почему следует применять паттерны проектирования?” книга дает однозначный ответ: “Знание таких концепций, как абстракция, наследование и полиморфизм, еще не делает из вас хорошего ОО-проектировщика. Паттерны содержат проверенный опыт ОО-проектирования.”

“Краткое изложение”

Книга поделена на 14 глав плюс введение. В начале авторы книги стараются подготовить читателя, настроить его мозг на правильное восприятие информации о дизайне паттернов. Первая глава объясняет основной принцип паттернов, а также то, для каких целей они служат. Легко и ненавязчиво рассматривается один из наиболее используемых паттернов — стратегия. Главы со второй по одиннадцатую посвящены подробному разбору отдельных паттернов:
  1. Наблюдатель. Распространяет по объектам события, которые заинтересованы в их наступлении.
  2. Декоратор. Другой взгляд на наследование в Java и наделение классов Java новыми возможностями без модификации кода.
  3. Фабрика. Паттерн спасает код от нежелательных зависимостей.
  4. Одиночка. Также известный как Singleton, позволяет создавать единственный на всю программу объект класса.
  5. Команда. Паттерн позволяет удобно инкапсулировать вызов метода, расширяя возможности.
  6. Адаптер и Фасад. Решение проблемы несовместимости интерфейсов, а также упаковка объектов для упрощения их интерфейса.
  7. Шаблонный метод. Инкапсулирование алгоритмических блоков, позволяющее субклассам в любой момент связываться с нужным алгоритмом обработки.
  8. Итератор и Компоновщик. Паттерн предоставляет удобный инструмент перебора коллекций вне зависимости от их типа. Дополнительно в главе дается порция информации о суперколлекциях.
  9. Состояние. Объекты наделяются способностью управлять своим поведением через изменение внутреннего состояния.
  10. Заместитель. Очень удобный паттерн для управления доступом к объекту.
В главе 12 рассматриваются составные паттерны, а точнее, комбинации некоторых рассмотренных паттернов, с помощью которых можно строить мощные архитектуры программ. Глава 13 посвящена применению паттернов в реальных задачах, представлена классификация паттернов, их разновидности и руководство по использованию. В качестве приложения в книге служит глава 14, в которой рассматривается более широкий спектр паттернов. Каждый из них по-своему полезен, поэтому знать их более чем желательно. Разумеется, они не такие популярные, как паттерны из глав 2-11, однако это не делает их менее полезными. Книга не претендует на академически точное изложение теории паттернов. Но если книги серии Head First будут такими дотошными, у начинающих разработчиков не будет шансов разобраться, что к чему и прояснить для себя основы основ. Это простой и удобный способ узнать, что такое шаблоны проектирования для тех, кто с ними не знаком. По утверждению авторов, “Паттерны проектирования” — книга, которая подойдет тем, кто уже знаком с Java (или C#), желает изучить принципы объектно-ориентированного проектирования и предпочитает оживленную беседу скучным лекциям. Данная книга — не справочник! Если вы — профессиональный разработчик со стажем и работаете хотя бы частью этих паттернов, вряд ли книга будет вам интересна. Важная составляющая книги — упражнения: их не стоит пропускать. При внимательном прочтении книги и, в крайнем случае, минимальном поиске в интернете, их решение не добавит вам головной боли. А вот польза точно будет. По крайней мере, глубже разберетесь в теории, которая излагается в книге.

Достоинства и недостатки

Я, как и многие из тех, кто учится на JavaRush, холодно отношусь к скучноватым лекциям, зубрежке материала и прочему насилию над психикой ученика, жаждущего знаний. Силы, потраченные на заучивание непонятных текстов, на мой взгляд, лучше всего направить на поиск альтернативных источников обучения. Эта книга — одна из тех, на которую стоит потратить свое время и усилия. Отличный стиль изложения, грамотное управление вниманием читателя, повторяемость ключевых моментов формируют главное достоинство этой книги — легкость усвоения материала. Большое количество иллюстраций — дополнительный плюс. На мой взгляд, в книге каждая картинка на своем месте: все они позволяют усилить слова авторов и глубже понять суть материала. Как я уже писал выше, эта книга — не справочник: у ее авторов нет цели перечислить все паттерны. Ее главная задача — дать понимание и рассказать об основных шаблонах, чтобы остальные, более сложные, воспринимались легче. И с этим она справляется на все 100%. Среди недостатков можно выделить то, что Head first design patterns на русском читается не так гладко, как на английском. Конечно же, каждый разработчик должен владеть английским, но у начинающих программистов этот навык не всегда прокачан до такой степени, чтобы читать книги в оригинале. Тем не менее, это можно считать натянутым минусом, так как материал подается достаточно точно и смысл сохраняется.

Дополнительные книги по паттернам проектирования

Я сторонник убеждения, что фундаментальные темы лучше изучать по нескольким источникам и искать в них подходящий для себя стиль подачи. Когда захотите погрузиться в паттерны и почитать дополнительную теорию, поверьте, вам будет, чем занять свои вечера.
  1. Приемы объектно-ориентированного проектирования. Паттерны проектирования (Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж.).

    Обзор книги “Паттерны проектирования” (Head First Design Patterns) - 2

    Это более серьезное издание, справочник паттернов, очень уважаемая книга от “Банды четырех”. Многие называют ее библией ОО-проектирования.

    В сети мнения разработчиков делятся на 3 лагеря:

    • одни утверждают, что книга устарела, и из-за стиля изложения читать ее невозможно
    • другие рекомендуют использовать книгу исключительно как справочник по паттернам, не более
    • третьи говорят, что книга — святой грааль паттернов проектирования, и ее должен прочесть каждый, кто хочет однажды стать Senior Java Developer
    Я приверженец второй группы: считаю, что книга действительно достойная, но читать ее для развития, а не с целью поиска какой-либо информации, очень сложно.

    Важно: примеры в книге написаны на С++.

  2. Java EE. Паттерны проектирования для профессионалов (Мурат Йенер, Алекс Фидом).

    Обзор книги “Паттерны проектирования” (Head First Design Patterns) - 3

    Эта книга посвящена проектированию Enterprise-приложений: в ней рассматривается множество примеров реальных прикладных задач.

  3. Шаблоны проектирования в Java (Гранд М.).

    Обзор книги “Паттерны проектирования” (Head First Design Patterns) - 4

    В книге красочно демонстрируется, как применение шаблонов экономит время разработчиков, приведен обзор языка UML и описано 47 шаблонов проектирования.

Паттерны проектирования на JavaRush

В курсе JavaRush паттерны проектирования изучаются на уровне 7 квеста Java Collections. Лекции 1 и 2 посвящены самым распространенным шаблонам, а в лекции 4 можно порешать задачки по этой теме. Ниже — несколько интересных статей, чтобы “усилиться”:
  1. Общая статья на тему паттернов с категориями, примерами, все как мы любим.

  2. Две статьи по паттернам: часть 1 обзорная и более подробная часть 2.

  3. Паттерны проектирования на примере шаблона Singleton.

  4. Статьи про паттерн “Стратегия” и “Адаптер”.

  5. Понятие паттернов проектирования связано с UML-диаграммами, эта статья поможет разобраться что это такое.