Введение в паттерны проектирования
Что представляют собой паттерны проектирования? Паттерн представляет определенный способ построения программного кода для решения часто встречающихся проблем проектирования. В данном случае предполагается, что есть некоторый набор общих формализованных проблем, которые довольно часто встречаются, и паттерны предоставляют ряд принципов для решения этих проблем.
Хотя идея паттернов как способ описания решения распространенных проблем в области проектирования появилась довольно давно, но их популярность стала расти во многом благодаря известной работе четырех авторов Эриха Гаммы, Ричарда Хелма, Ральфа Джонсона, Джона Влиссидеса, которая называлась «Design Patterns: Elements of Reusable Object-Oriented Software» (на русском языке известна как «Приемы объектно-ориентированного проектирования. Паттерны проектирования») и которая вышла в свет в 1994 году. А сам коллектив авторов нередко называют «Банда четырёх» или Gang of Four или сокращенно GoF. Данная книга по сути являлась первой масштабной попыткой описать распространенные способы проектирования программ. И со временем применение паттернов стало считаться хорошей практикой программирования.
Что же дает нам применение паттернов? При написании программ мы можем формализовать проблему в виде классов и объектов и связей между ними. И применить один из существующих паттернов для ее решения. В итоге нам не надо ничего придумывать. У нас уже есть готовый шаблон, и нам только надо его применить в конкретной программе.
Причем паттерны, как правило, не зависят от языка программирования. Их принципы применения будут аналогичны и в C#, и в Jave, и в других языках. Хотя в рамках данного руководства мы будем говорить о паттернах в контексте языка C#.
Также мышление паттернами упрощает групповую разработку программ. Зная применяемый паттерн проектирования и его основные принципы другому программисту будет проще понять его реализацию и использовать ее.
В то же время не стоит применять паттерны ради самих паттернов. Хорошая программа предполагает использование паттернов. Однако не всегда паттерны упрощают и улучшают программу. Неоправданное их использование может привести к усложнению программного кода, уменьшению его качества. Паттерн должен быть оправданным и эффективным способом решения проблемы.
Существует множество различных паттернов, которые решают разные проблемы и выполняют различные задачи. Но по своему действию их можно объединить в ряд групп. Рассмотрим некоторые группы паттернов. В основу классификации основных паттернов положена цель или задачи, которые определенный паттерн выполняет.
Порождающие паттерны
Порождающие паттерны — это паттерны, которые абстрагируют процесс инстанцирования или, иными словами, процесс порождения классов и объектов. Среди них выделяются следующие:
Абстрактная фабрика (Abstract Factory)
Фабричный метод (Factory Method)
Другая группа паттернов — структурные паттерны — рассматривает, как классы и объекты образуют более крупные структуры — более сложные по характеру классы и объекты. К таким шаблонам относятся:
Третья группа паттернов называются поведенческими — они определяют алгоритмы и взаимодействие между классами и объектами, то есть их поведение. Среди подобных шаблонов можно выделить следующие:
Цепочка обязанностей (Chain of responsibility)
Шаблонный метод (Template method)
Существуют и другие классификации паттернов в зависимости от того, относится паттерн к классам или объектам.
Паттерны классов описывают отношения между классами посредством наследования. Отношения между классами определяются на стадии компиляции. К таким паттернам относятся:
Фабричный метод (Factory Method)
Шаблонный метод (Template Method)
Другая часть паттернов — паттерны объектов описывают отношения между объектами. Эти отношения возникают на этапе выполнения, поэтому обладают большей гибкостью. К паттернам объектов относят следующие:
Новости
Перед вами юбилейное издание с обновленным переводом книги, ставшей must-read для каждого программиста. «Паттерны объектно-ориентированного проектирования» пришли на смену «Приемам объектно-ориентированного проектирования».
Четыре первоклассных разработчика — Банда четырех — представляют вашему вниманию опыт ООП в виде двадцати трех паттернов. Паттерны появились потому, что разработчики искали пути повышения гибкости и степени повторного использования своих программ. Авторы не только дают принципы использования шаблонов проектирования, но и систематизируют информацию. Вы узнаете о роли паттернов в архитектуре сложных систем и сможете быстро и эффективно создавать собственные приложения с учетом всех ограничений, возникающих при разработке больших проектов. Все шаблоны взяты из реальных систем и основаны на реальной практике. Для каждого паттерна приведен код на C++ или Smalltalk, демонстрирующий его возможности.
Предисловие
В книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании.
Паттерны появились потому, что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. «Банда Четырех» объясняет каждый паттерн на простом примере четким и понятным языком. Использование паттернов при разработке программных систем позволяет проектировщику перейти на более высокий уровень разработки проекта. Теперь архитектор и программист могут оперировать образными названиями паттернов и общаться на одном языке.
Таким образом, книга решает две задачи.
Во-первых, знакомит с ролью паттернов в создании архитектуры сложных систем.
Во-вторых, позволяет проектировщикам с легкостью разрабатывать собственные приложения, применяя содержащиеся в справочнике паттерны.
Что изменилось в издании 2020 года?
- Актуализирована терминология (например, для «реорганизации» кода уже вполне прижился термин «рефакторинг», для share — «совместное использование» вместо «разделения», а для mixin — «примесь»);
- обновлен стиль;
- устранены излишне громоздкие слова (например, «специфицирование» или «инстанцирование». Первое можно вполне адекватно заменить «определением», второе — «созданием экземпляра»);
- книга наконец-то называется «Паттерны объектно-ориентированного проектирования».
ПАТТЕРН TEMPLATE METHOD (ШАБЛОННЫЙ МЕТОД)
Название и классификация паттерна
Шаблонный метод — паттерн поведения классов.
Назначение
Шаблонный метод определяет основу алгоритма и позволяет подклассам переопределить некоторые шаги алгоритма, не изменяя его структуру в целом.
Мотивация
Рассмотрим каркас приложения, в котором имеются классы Application и Document. Класс Application отвечает за открытие существующих документов, хранящихся во внешнем формате (например, в файле). Объект класса Document представляет информацию документа после его прочтения из файла.
Приложения, построенные на базе этого каркаса, могут порождать подклассы от классов Application и Document, отвечающие конкретным потребностям.
Например, графический редактор определит подклассы DrawApplication и DrawDocument, а электронная таблица — подклассы SpreadsheetApplication и SpreadsheetDocument.
В абстрактном классе Application определен алгоритм открытия и чтения документа в операции OpenDocument:
Операция OpenDocument определяет все шаги открытия документа. Она проверяет, возможно ли открыть документ, создает объект класса Document, добавляет его к набору документов и читает документ из файла.
Операцию вида OpenDocument мы будем называть шаблонным методом, описывающим алгоритм в категориях абстрактных операций, которые замещены в подклассах для получения нужного поведения. Подклассы класса Application проверяют возможность открытия (CanOpenDocument) и создания документа (DoCreateDocument). Подклассы класса Document считывают документ (DoRead). Шаблонный метод определяет также операцию, которая позволяет подклассам Application получить информацию о том, что документ вот-вот будет открыт (AboutToOpenDocument).
Определяя некоторые шаги алгоритма с помощью абстрактных операций, шаблонный метод фиксирует их последовательность, но позволяет реализовать их в подклассах классов Application и Document.
Design Patterns
Приёмы объектно-ориентированного проектирования. Паттерны проектирования. | |
---|---|
англ. Design Patterns: Elements of Reusable Object-Oriented Software |
|
Автор | «Банда четырёх»: Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес |
Жанр | Книга о программировании и шаблонах проектирования |
Язык оригинала | английский |
Оригинал издан | 1994 |
Переводчик | А. Слинкин |
Серия | Professional Computing |
Издатель | Addison-Wesley, «Питер» |
Выпуск | 21.10.1994 |
Страниц | 395 |
Носитель | книга |
ISBN | 0-201-63361-2, 5-469-01136-4 |
«Приёмы объектно-ориентированного проектирования. Паттерны проектирования» (англ. Design Patterns: Elements of Reusable Object-Oriented Software ) — книга 1994 года о программной инженерии, описывающая шаблоны проектирования программного обеспечения. Авторами книги, которых прозвали «Бандой четырёх» [1] , являются Эрих Гамма, Ричард Хелм, Ральф Джонсон (англ.) русск. , Джон Влиссидес. Предисловие написал Гради Буч.
Книга состоит из двух частей, в первых двух главах рассказывается о возможностях и недостатках объектно-ориентированного программирования, а во второй части описаны 23 классических шаблона проектирования. Примеры в книге написаны на языках программирования C++ и Smalltalk.
Книга получила награды Jolt productivity (англ.) русск. , и Software Development productivity в 1994 году [2] . Коллектив авторов был награждён премией SIGPLAN (англ.) русск. Programming Languages Achievement Award в 2005 году [3] за данную книгу.
Книга издана 21 октября 1994 года с отметкой копирайта 1995 года. На июль 2013 года имеет 41 переиздание. Впервые представлена публике на встрече OOPSLA, Портланд, Орегон в октябре 1994 года. Продано более полумиллиона экземпляров книги на английском и 13 других языках. Перевод на русский издан издательством «Питер».
Издания
Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес; [пер. с англ.: А. Слинкин науч. ред.: Н. Шалаев]. — Санкт-Петербург [и др.] : Питер, 2014. — 366 с. : ил. ; 24 см.
Паттерны
Описанные в книге паттерны (шаблоны проектирования)
Примечания
- ↑Gang Of Four, Content Creation Wiki for People Projects And Patterns in Software Development.
- ↑Jolt winners 1994Архивировано 25 мая 2009 года., Dr. Dobb’s
- ↑SIGPLAN — AwardsАрхивировано 3 ноября 2007 года.
Это заготовка статьи о книге. Вы можете помочь проекту, дополнив её. |
- Делегирования
- Интерфейс
- Неизменяемый объект
- Функционального дизайна
- Абстрактная фабрика
- Объектный пул
- Одиночка
- Отложенная инициализация
- Прототип
- Строитель
- Фабричный метод
- Адаптер
- Выделение частного класса данных
- Декоратор
- Заместитель
- Компоновщик
- Мост
- Приспособленец
- Фасад
- Интерпретатор
- Итератор
- Команда
- Наблюдатель
- Посетитель
- Посредник
- Состояние
- Стратегия
- Хранитель
- Null Object
- Цепочка обязанностей
- Шаблонный метод
- Блокировка с двойной проверкой
- Однопоточное выполнение
- Планировщик
- Производитель-потребитель
- Активный объект
- Локатор служб
- Design Patterns
- Кристофер Александер
- Эрих Гамма
- Джон Влиссидес
- Гради Буч
- Кент Бек
- Говард Каннингем
- Мартин Фаулер
- Роберт Мартин
Что такое Wiki.cologne Вики является главным информационным ресурсом в интернете. Она открыта для любого пользователя. Вики это библиотека, которая является общественной и многоязычной.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License.
Паттерны проектирования
Учебное пособие.
Э. Фримен, Э. Фримен, К. Сьерра, Б. Бейтс «Паттерны проектирования» Питер, 2011 год, 656 стр. ил., O’Reilly, (65,1 мб. pdf)
Книга «Паттерны проектирования» серии Head First, издательства O’Reilly, отличаются оригинальной манерой подачи материала читателю: разговорный стиль изложения, избыточность информации (несколько повторений одного и того же), использование рисунков несущих эмоциональное содержание, представление нескольких точек зрения. По утверждению авторов такой подход задействует оба полушария мозга, что позволяет более качественно усваивать информацию.
Эта книга — учебник и здесь представлены важнейшие паттерны проектирования из числа базовых (приводятся примеры кода на Java). Вы узнаете как пользоваться опытом других разработчиков, которые успешно решали аналогичные задачи используя преимущества паттернов проектирования. Изучите некоторые трюки и поймёте как работать с конкретными паттернами основываясь на принципах ООП. Для продуктивного чтения и изучения книги вам необходимо обязательно знать основы ООП и Java.
ISBN 978-5-459-00435-9
1. Добро пожаловать в мир паттернов.
Приложение SimUDuck 38
Джо думает о наследовании… 41
Как насчет интерфейса? 42
Единственная константа в программировании 44
Отделяем переменное от постоянного 46
Реализация поведения уток 49
Тестирование кода Duck 54
Динамическое изменение поведения 56
Инкапсуляция поведения: общая картина 58
Отношения СОДЕРЖИТ бывают удобнее отношений ЯВЛЯЕТСЯ 59
Паттерн Стратегия 60
Сила единой номенклатуры 64
Как пользоваться паттернами? 65
Новые инструменты 68
Ответы к упражнениям 69
2. Объекты в курсе событий.
Приложение Weather Monitoring 73
Знакомство с паттерном Наблюдатель 78
Издатели + Подписчики = Паттерн Наблюдатель 79
Пятиминутная драма: субъект для наблюдения 82
Определение паттерна Наблюдатель 85
Сила слабых связей 87
Проектирование Weather Station 90
Реализация Weather Station 91
Встроенная реализация в языке Java 98
Темная сторона java.util.Observable 105
Новые инструменты 108
Ответы к упражнениям 110
3. Украшение объектов.
Добро пожаловать в Starbuzz 112
Принцип открытости/закрытости 118
Знакомство с паттерном Декоратор 120
Построение заказанного напитка 121
Определение паттерна Декоратор 123
Декораторы и напитки 124
Пишем код для Starbuzz 127
Декораторы в реальном мире: ввод/вывод в языке Java 132
Написание собственного декоратора ввода/вывода 134
Новые инструменты 137
Ответы к упражнениям 138
4. Домашняя ОО-выпечка.
Видим new— подразумеваем конкретный 142
Пицца Объектвиля 144
Инкапсуляция создания объектов 146
Построение Простой Фабрики для пиццы 147
Определение Простой Фабрики 149
Инфраструктура для пиццерии 152
Принятие решений в субклассах 153
Субклассы PizzaStore 155
Объявление Фабричного Метода 157
Пора познакомиться с паттерном Фабричный Метод 163
Параллельные иерархии классов 164
Определение паттерна Фабричный Метод 166
PizzaStore с сильными зависимостями 169
Зависимости между объектами 170
Принцип инверсии зависимостей 171
Вернемся в пиццерию… 176
Семейства ингредиентов… 177
Построение фабрик ингредиентов 178
Рассмотрим Абстрактную Фабрику 185
За сценой 186
Определение паттерна Абстрактная Фабрика 188
Сравнение паттернов Фабричный Метод и Абстрактная Фабрика 192
Новые инструменты 194
Ответы к упражнениям 195
5. Уникальные объекты.
Единственный и неповторимый 200
Вопросы и ответы 201
Классическая реализация паттерна Одиночка 203
Признания Одиночки 204
Шоколадная фабрика 205
Определение паттерна Одиночка 207
Кажется, у нас проблемы… 208
Представьте, что вы — JVM 209
Решение проблемы многопоточного доступа 210
Одиночка. Вопросы и ответы 214
Новые инструменты 216
Ответы к упражнениям 217
6. Инкапсуляция вызова.
Автоматизируй дом или проиграешь 220
Пульт домашней автоматизации 221
Классы управления устройствами 222
Краткое введение в паттерн Команда 225
Рассмотрим взаимодействия чуть более подробно… 226
Роли и обязанности в кафе Объектвиля 227
От кафе к паттерну Команда 229
Наш первый объект команды 231
Определение паттерна Команда 234
Связывание команд с ячейками 237
Реализация пульта 238
Проверяем пульт в деле 240
Пора писать документацию… 243
Реализация отмены с состоянием 248
На каждом пульте должен быть Режим Вечеринки! 252
Использование макрокоманд 253
Расширенные возможности паттерна Команда: очереди запросов 256
Расширенные возможности паттерна Команда: регистрация запросов 257
Новые инструменты 258
Ответы к упражнениям 259
7. Умение приспосабливаться.
Адаптеры вокруг нас 262
Объектно-ориентированные адаптеры 263
Как работает паттерн Адаптер 267
Определение паттерна Адаптер 269
Адаптеры объектов и классов 270
Беседа у камина: Адаптер объектов и Адаптер классов 273
Практическое применение адаптеров 274
Адаптация перечисления к итератору 275
Беседа у камина: паттерн Декоратор и паттерн Адаптер 278
Домашний кинотеатр 281
Свет, камера, фасад! 284
Построение фасада для домашнего кинотеатра 287
Определение паттерна Фасад 290
Принцип минимальной информированности 291
Новые инструменты 296
Ответы к упражнениям 297
8. Инкапсуляция алгоритмов.
Кофе и чай (на языке Java) 301
Абстрактный кофе и чай 304
Продолжаем переработку… 305
Абстрагирование prepareRecipe() 306
Что мы сделали? 309
Паттерн Шаблонный Метод 310
Готовим чай… 311
Что дает Шаблонный Метод? 312
Определение паттерна Шаблонный Метод 313
Код под увеличительным стеклом 314
Перехватчики в паттерне Шаблонный Метод 316
Использование перехватчиков 317
Проверяем, как работает код 318
Голливудский принцип 320
Голливудский принцип и Шаблонный Метод 321
Шаблонные методы на практике 323
Сортировка на базе Шаблонного Метода 324
Сортируем уток… 325
Сравнение объектов Duck 326
Как сортируются объекты Duck 328
Шаблонный метод в JFrames 330
Аплеты 331
Беседа у камина: Шаблонный Метод и Стратегия 332
Новые инструменты 334
Ответы к упражнениям 335
9. Управляемые коллекции.
Бистро объединяется с блинной! 338
Сравниваем две реализации 340
Как инкапсулировать перебор элементов? 345
Паттерн Итератор 347
Добавление итератора в DinerMenu 348
Рассмотрим архитектуру 353
Интеграция с java.util.Iterator 355
Что нам это дает? 357
Определение паттерна Итератор 358
Принцип одной обязанности 361
Итераторы и коллекции 370
Итераторы и коллекции в Java 5 371
А когда мы уже торжествовали победу… 375
Определение паттерна Компоновщик 378
Проектирование меню с использованием паттерна Компоновщик 381
Реализация комбинационного меню 384
Возвращение к итераторам 390
Пустой итератор 394
Магия итераторов и композиций 396
Новые инструменты 401
Ответы к упражнениям 402
10. Состояние дел.
Работа с диаграммой состояния 407
Краткий курс конечных автоматов 408
Программирование 410
Кто бы сомневался… запрос на изменение! 414
Печальное СОСТОЯНИЕ дел… 416
Определение интерфейса State и классов 419
Реализация классов состояний 421
Переработка класса Gumball Machine 422
Определение паттерна Состояние 430
Состояние vs Стратегия 431
Проверка разумности 437
Чуть не забыли! 440
Новые инструменты 443
Ответы к упражнениям 444
11. Управление доступом к объектам.
Монитор и автомат с жевательной резинкой 450
Роль «удаленного заместителя» 454
RMI-тур 456
К удаленному заместителю GumballMachine 470
Удаленный заместитель. За сценой 478
Определение паттерна Заместитель 480
Знакомьтесь: Виртуальный Заместитель 482
Проектирование виртуального заместителя 484
Виртуальный заместитель. За сценой 490
Создание защитного заместителя средствами Java API 494
Пятиминутная драма: защита клиентов 498
Динамический заместитель 499
Разновидности заместителей 508
Новые инструменты 510
Ответы к упражнениям 511
12. Паттерны паттернов.
Совместная работа паттернов 518
И снова утки 519
Добавление Адаптера 522
Добавление Декоратора 524
Добавление Фабрики 526
Добавление Компоновщика и Итератора 531
Добавление Наблюдателя 534
И все вместе 541
Диаграмма классов с высоты утиного полета 542
Паттерны проектирования — ключ к МVC 544
МУС с точки зрения паттернов 548
Использование МVC для управления ритмом… 550
Модель 553
Представление 555
Контроллер 558
Анализ паттерна Стратегия 561
Адаптация модели 562
Можно переходить к HeartController 563
МVC и Веб 565
Паттерны проектирования и Модель 2 573
Новые инструменты 576
Ответы к упражнениям 577
13. Паттерны в реальном мире.
Руководство по использованию паттернов 594
Определение паттерна проектирования 595
Подробнее об определении паттерна проектирования 597
Да пребудет с вами Сила 598
Каталоги паттернов 599
Как создавать паттерны 602
Хотите создавать паттерны? 603
Классификация паттернов проектирования 605
Мыслить паттернами 610
Разум и паттерны 613
И не забудьте о единстве номенклатуры 615
Пять способов использования единой номенклатуры 616
Прогулка по Объектвилю с «Бандой Четырех» 617
Наше путешествие только начинается… 618
Другие ресурсы, посвященные паттернам 619
Разновидности паттернов 620
Антипаттерны и борьба со злом 622
Новые инструменты 624
Покидая Объектвиль… 625
Programming stuff
Страницы
- Главная страница
- Статьи
- Книги
- C++11 FAQ
вторник, 29 мая 2012 г.
Фриман и Фриман. Паттерны проектирования
DISCLAIMER: не проматывайте этот пост только из-за того, что обзор книг – это неинтересно. Здесь будет пяток интересных цитат и ряд других полезных мыслей!
Если спросить у десяти разработчиков о паттернах проектирования и о том, какая книга является лучшим источником информации по этой теме, то 9 из 10 назовут знаменитую книгу банды четырех и будут правы. GoF – является классическим каталогом паттернов в том виде, в котором он был описан Кристофером Александером 35 лет назад и все еще остается бесценным справочником для любого программиста.
Но, как и у любого каталога (или справочника), Эрих Гамма и др. сосредотачиваются на применимости паттернов, на связях конкретного паттерна с другими, они дают примеры использования в реальных проектах, но они не учат (точнее, не акцентируют на этом внимание) тому, какие принципы объектно-ориентированного программирования эти паттерны решают; где найти ту грань, когда от паттернов лучше отказаться и не предупреждают о недостатках их чрезмерного использования.
Короче говоря, GoF – это идеальный инструмент для «прокачанного» специалиста и далеко не идеальный источник для неокрепшего разума.
Цитата (основная суть паттернов проектирования): выделите переменные составляющие и инкапсулируйте их, чтобы позднее их можно было изменять или расширять без воздействия на постоянные составляющие.
В отличие от банды четырех Фриманы делают акцент на принципах ООП и показывают, какие проблемы могут возникнуть с дизайном системы и как их можно решить с помощью основных паттернов. Классический вопрос о разнице между наследованием и агрегацией обсасывается со всех сторон, причем не столько в контексте паттернов, сколько в контексте связности и гибкости дизайна.
Цитата: Прежде всего, при проектировании следует использовать самые простые решения. Вашей целью должна быть простота, а не «как бы применить паттерн в этой задаче». Не стоит думать, что без использования паттернов вас не будут считать грамотным специалистом. Другие разработчики по достоинству оценят простоту архитектуры.
Еще одной отличительной особенностью книги является способ подачи материала: 650 страниц книги можно одолеть за пару выходных, при этом мозг не взорвется от перенапряжения; авторы целенаправленно вдалбливают самыми различными способами (картинки, цитаты, повторения ключевых концепций) самое важное, что должен читатель вынести после прочтения. Иногда, это начинает напрягать, но, опять-таки, «это не баг, это фича» данной книги, и если нужна дикая концентрация ООП-шной мысли на строку текста, то тут уж лучше обратиться к правильному источнику (например, к Мейеру).
Цитата: Если кто-то ходит, как утка, и крякает, как утка, то это и есть может быть утка индюшка с утиным адаптером.
Еще очень порадовали примеры паттернов (например, примеры декораторов ввода вывода в Java и декорирование напитков), хотя в некоторых примерах (например, при рассмотрении заместителей) дается слишком уж много специфических языковых конструкций.
Если говорить о других недостатках, то они относится к нашим переводчикам. Нет, с переводом все нормально, он на довольно высоком уровне и мне не приходилось лезть в оригинал, чтобы понять смысл предложения. Проблема в отсутствии оригинальных терминов. Все же немаловажной ролью паттернов является коммуникативная составляющая, а некоторые паттерны мы называем исключительно в оригинале, вот и приходится думать о том, что же такое заместитель, это proxy или нет. Не говоря уже за такие термины, как связность, когда только из контекста становится понятно, идет ли речь в книге о cohesion или coupling. Это не так часто напрягает, но было бы неплохо видеть перед глазами оригинальные названия.
ПРИМЕЧАНИЕ
Если интересна природа терминов cohesion и coupling или, вообще, интересна история паттернов проектирования, то вам сюда: Шаблоны проектирования. История успеха.
Цитата: В одной ситуации паттерны используются даже при наличии более простого решения: если вы ожидаете, что некоторые аспекты вашей системы будут изменяться. Только следите за тем, чтобы паттерны были ориентированы на реальные, а не на чисто теоретические изменения.
Последней отличительной особенностью книги является прагматический взгляд на ОО дизайн, простоту и применение паттернов в повседневной жизни. Многие из нас сталкивались с тем, что разработчик проходит следующие стадии отношения к паттернам:
1-я стадия: Ух-ты-Ух-ты-Ух-ты! Я узнал, что такое паттерны! Клева! Как бы мне их заюзать!
2-я стадия: Ух-ты! Я отрефакторил старый код и вместо десяти строк кода заиспользовал 7 паттернов! Я мегакрут!
3-я стадия: ух-ты. Ну, паттерны — это классная штука, но как-то уже нет особого желания впихивать их куда угодно. Чего-то потом и сам ноги ломаешь за всеми этими абстрактными фасадированными декораторами, завернутыми в синглтон.
4-я стадия: нет, паттерны – это хорошо, но прагматизм – рулит, да и вообще: а) думать еще никто не отменял; б) простое решение лучше сложного; г) паттерны хорошо, но принципы ООП зачастую и так дадут ответы на большую часть вопросов.
В результате страсть от полного щенячьего восторга постепенно сменяется прагматичным применением принципов и паттернов. Фриманы (да, это авторы сего талмуда) уделяют этому вопросу достаточно много внимания, начиная с 610 страницы. У меня, правда, есть опасение, что не все дочитают до этого места, а бросятся использовать паттерны налево и направо значительно раньше, в результате чего бесценный урок будет пропущен.
Цитата: В каких случаях паттерны следует исключать из архитектуры? Если ваша система стала чрезмерно сложной, а изначально запланированная гибкость оказалась излишней. Проще говоря, когда более простое решение предпочтительно (кстати, эта мысль подтверждается моим собственным опытом).
Если сложить все вышесказанное вместе, то мы получаем, что эту книгу нельзя использовать в качестве справочника (или каталога паттернов), в ней будет слишком много воды для опытного программиста и она не сможет заменить серьезную книгу по ООП. С другой стороны, это идеальный учебник базового уровня по паттернам и основам ООП, который даст основные сведения по этим темам и поможет устаканить существующий беспорядок в голове.
Оценка: 4 (идеальный учебник, но едва ли подойдет опытному специалисту).
З.Ы. Обычно, по мере чтения книги, я пишу свои впечатления в Google+, так было с книгой Мейера (раз, два, три, четыре), и с данной книгой тоже (раз, два, три, четыре). Так что вы можете не ждать рецензии (в которой в любом случае будет не все), а узнавать мое мнение о книге по ходу дела в Г+.
detector