Способ качественно изучить паттерны проектирования
Привет, Хабр! Когда я изучал паттерны проектирования, я делал это с помощью прочтения двух книг: простую и понятную книгу от Head First одновременно со сложной и менее понятной книгой от Банды Четырех. Ниже описан мой опыт того, как именно я это делал, плюс выводы, впечатления и советы
Дисклеймер: я не утверждаю, что паттерны проектирования безусловно необходимы, и что если человек не прочитал паттерны Банды Четырех, то он не может называться разработчиком. Я лишь делюсь своим опытом, как изучал паттерны именно я. И надеюсь, что кому-то этот опыт окажется полезным
Итак, для изучения паттернов читал я одновременно следующие книги:
Издание Head First — Паттерны проектирования
Банда Четырех — Приёмы объектно-ориентированного проектирования. Паттерны проектирования
Первая книга читается легко и просто, там всё понятно; вторая книга читается сложнее, она более техническая, но там и больше полезной информации.
В чем смысл чтения двух книг одновременно: можно идти последовательно по темам (≈ паттернам), сначала читать главу из простой книги, а потом главу на ту же тему из сложной. У такого подхода есть следующие плюсы:
Более сложная информация из сложной книги усваивается качественнее за счет того, что ты уже подготовлен к потреблению этой информации
Информация из обеих книг в целом усваивается лучше за счет повторения материала и взгляда на одну и ту же проблему с разных сторон
Соответствие глав/тем
Авторы книги от Head First не скрывают, что брали за основу книгу Банды Четырех. В частности, в книге от Head First обсуждаются ровно те же самые паттерны, что и в книге от Банды Четырех — какие-то больше, какие-то меньше. Таким образом, составить соответствие по темам между двумя книгами не очень сложно.
Ниже я привел некоторый план прочтения обеих книг (объяснение, как читать этот план, находится под самим планом):
# Введения и предисловия
[ ] Введение
[ ] Предисловие
[ ] Введение в паттерны
# Паттерны, хорошо описанные в обеих книгах
[ ] Предисловие к паттернам поведения
[ ] [ ] Strategy (Стратегия)
[ ] [ ] Observer (Наблюдатель)
[ ] Предисловие к структурным паттернам
[ ] [ ] Decorator (Декоратор)
[ ] Предисловие к порождающим паттернам
[ ] Фабрика (фабричный метод и абстрактная фабрика)
[ ] Factory Method (Фабричный метод)
[ ] Abstract Factory (Абстрактная фабрика)
[ ] [ ] Singleton (Одиночка)
[ ] [ ] Command (Команда)
[ ] Адаптер и фасад
[ ] Adapter (Адаптер)
[ ] Facade (Фасад)
[ ] [ ] Template Method (Шаблонный метод)
[ ] Итератор и компоновщик
[ ] Iterator (Итератор)
[ ] Composite (Компоновщик)
[ ] [ ] State (Состояние)
[ ] [ ] Proxy (Заместитель)
[ ] Составные паттерны
[ ] Паттерны для лучшей жизни
# Паттерны, хорошо описанные только Бандой Четырех
[ ] [ ] Bridge (Мост)
[ ] [ ] Builder (Строитель)
[ ] [ ] Chain of Responsibility (Цепочка обязанностей)
[ ] [ ] Flyweight (Приспособленец)
[ ] Обсуждение структурных паттернов
[ ] [ ] Interpreter (Интерпретатор)
[ ] [ ] Mediator (Посредник)
[ ] [ ] Memento (Хранитель)
[ ] [ ] Prototype (Прототип)
[ ] Обсуждение порождающих паттернов
[ ] [ ] Visitor (Посетитель)
[ ] Обсуждение паттернов поведения
# Заключения от Банды Четырех
[ ] Проектирование редактора документов
[ ] Заключение
Здесь названию главы/темы соответствует два столбца — первый столбец означает наличие главы/темы в книге от Head First, а второй — в книге Банды Четырех. Например, тема «Visitor (Посетитель)» есть в обеих книгах, а вот «Обсуждение паттернов поведения» — только в книге Банды Четырех. Порядок глав/тем соответствует порядку из Head First.
Все темы можно поделить на следующие группы:
Введения и предисловия
Паттерны, хорошо описанные в обеих книгах. Это те паттерны, которые прошли проверку временем и были доступно описаны Head First
Паттерны, хорошо описанные только Бандой Четырех. Это менее популярные паттерны, но тоже имеющие право быть изученными. Head First уделяет этим паттернам буквально по несколько страниц, в то время как Банда Четырех описывает эти паттерны так же, как и все остальные
Заключения от Банды Четырех. Здесь, помимо самого заключения, содержится пример использования паттернов на практике
Впечатления от книг
Head First
Специфическая обложка и кол-во страниц (600+) для такой, казалось бы, не очень серьезной книги могут оттолкнуть от прочтения, но на самом книга читается очень просто, интересно, местами даже забавно, но при этом рассказываются там вполне полезные вещи. На фоне Банды Четырех чтение этой книги воспринимается чуть ли ни как отдых.
Читать эту книгу имеет смысл последовательно, а не в случайном порядке. Именно поэтому порядок глав/тем при одновременном чтении обеих книг соответствует Head First.
Примеры кода написаны на Java.
Банда Четырех
В отличие от Head First, здесь нет определенного порядка. Книга является скорее справочником паттернов, и читать ее от корки до корки необходимости нет. Информация здесь более сухая и техническая, но рассмотрено значительно больше деталей и нюансов, связанных с реализацией и применением как конкретных паттернов, так и их комбинаций.
Примеры кода написаны на C++ и SmallTalk. Последний язык, как мне показалось, имеет довольно специфический синтаксис, но в целом можно понять, что хотят показать авторы.
Итого
Могу предложить 4 пути:
Повторить мой путь и прочитать обе книги одновременно. Такой вариант подойдет для тех, кто хочет начать изучать паттерны, но при этом хочет изучить их сразу на достаточно хорошем уровне
Прочитать только книгу от Банды Четырех. Подходит для тех, кто уже неплохо знает паттерны и хочет изучить их глубже
Прочитать только книгу от Head First. Подходит для тех, кто хочет начать изучать паттерны, но не хочет углубляться слишком сильно
Не читать ничего. Ибо кому вообще нужны эти паттерны в реальном мире
На этом всё. Надеюсь, кому-нибудь эта статья будет полезна, и спасибо за внимание!
P.S. Избежать большого кол-ва повторений слова «книга» не удалось, прошу простить.