Предисловие ...........................................................................................................11
От издательства.............................................................................................................................13
Глава 1. Введение в паттерны проектирования ..................................................................15
1.1. Что такое паттерн проектирования.............................................................................17
1.2. Паттерны проектирования в схеме MVC в языке Smalltalk...............................19
1.3. Описание паттернов проектирования.......................................................................22
1.4. Каталог паттернов проектирования ...........................................................................24
1.5. Организация каталога........................................................................................................27
1.6. Как решать задачи проектирования с помощью паттернов............................29
Поиск подходящих объектов...........................................................................................29
Определение степени детализации объекта ...........................................................31
Определение интерфейсов объекта ............................................................................32
Определение реализации объектов ............................................................................34
Наследование класса и наследование интерфейса..............................................36
Механизмы повторного использования ....................................................................39
Сравнение структур времени выполнения и времени компиляции............44
Проектирование с учетом будущих изменений......................................................45
1.7. Как выбирать паттерн проектирования....................................................................52
1.8. Как пользоваться паттерном проектирования......................................................54
Глава 2. Практический пример: проектирование редактора документов..............56
2.1. Задачи проектирования....................................................................................................56
2.2. Структура документа ..........................................................................................................59
Рекурсивная композиция ..................................................................................................60
Глифы...........................................................................................................................................62
Паттерн Composite (компоновщик) ..............................................................................64
2.3. Форматирование..................................................................................................................65
Инкапсуляция алгоритма форматирования .............................................................65
Классы Compositor и Composition .................................................................................66
Паттерн Strategy (Стратегия)............................................................................................68
2.4. Оформление пользовательского интерфейса........................................................69
Прозрачное окружение......................................................................................................69
Моноглиф..................................................................................................................................70
Паттерн Decorator (декоратор)........................................................................................73
2.5. Поддержка нескольких стандартов оформления.................................................73
Абстрагирование создания объекта ............................................................................74
Фабрики и изготовленные классы.................................................................................75
Паттерн Abstract Factory (абстрактная фабрика)....................................................78
2.6. Поддержка нескольких оконных систем...................................................................78
Можно ли воспользоваться абстрактной фабрикой? ..........................................78
Инкапсуляция зависимостей от реализации............................................................79
Классы Window и WindowImp..........................................................................................82
Подклассы WindowImp .......................................................................................................83
Настройка класса Window с помощью WindowImp...............................................84
Паттерн Bridge (мост)...........................................................................................................86
2.7. Операции пользователя ...................................................................................................86
Инкапсуляция запроса........................................................................................................87
Класс Command и его подклассы...................................................................................88
Отмена операций ..................................................................................................................90
История команд .....................................................................................................................90
Паттерн Command (команда)...........................................................................................92
2.8. Проверка правописания и расстановка переносов............................................92
Доступ к распределенной информации.....................................................................93
Инкапсуляция доступа и порядка обхода..................................................................94
Класс Iterator и его подклассы.........................................................................................95
Паттерн Iterator (итератор)................................................................................................98
Обход и действия, выполняемые при обходе..........................................................99
Инкапсуляция анализа..................................................................................................... 100
Класс Visitor и его подклассы ........................................................................................ 104
Паттерн Visitor (посетитель)........................................................................................... 105
2.9. Резюме.................................................................................................................................... 106
Глава 3. Порождающие паттерны............................................................................................ 108
Паттерн Abstract Factory (абстрактная фабрика)........................................................ 113
Паттерн Builder (строитель).................................................................................................. 124
Паттерн Factory Method (фабричный метод)................................................................ 135
Паттерн Prototype (прототип).............................................................................................. 146
Паттерн Singleton (одиночка).............................................................................................. 157
Обсуждение порождающих паттернов........................................................................... 166
Глава 4. Структурные паттерны................................................................................................ 169
Паттерн Adapter (адаптер)..................................................................................................... 171
Паттерн Bridge (мост)............................................................................................................... 184
Паттерн Composite (компоновщик) .................................................................................. 196
Паттерн Decorator (декоратор) ........................................................................................... 209
Паттерн Facade (фасад)........................................................................................................... 221
Паттерн Flyweight (приспособленец)............................................................................... 231
Паттерн Proxy (заместитель)................................................................................................. 246
Обсуждение структурных паттернов............................................................................... 258
Адаптер и мост..................................................................................................................... 259
Компоновщик, декоратор и заместитель................................................................ 260
Глава 5. Паттерны поведения.................................................................................................... 262
Паттерн Chain of Responsibility (цепочка обязанностей)........................................ 263
Паттерн Command (команда)............................................................................................... 275
Паттерн Interpreter (интерпретатор) ................................................................................ 287
Паттерн Iterator (итератор).................................................................................................... 302
Паттерн Mediator (посредник)............................................................................................. 319
Паттерн Memento (хранитель) ............................................................................................ 330
Паттерн Observer (наблюдатель)........................................................................................ 339
Паттерн State (состояние)...................................................................................................... 352
Паттерн Strategy (стратегия) ................................................................................................ 362
Паттерн Template Method (шаблонный метод)............................................................ 373
Паттерн Visitor (посетитель).................................................................................................. 379
Обсуждение паттернов поведения................................................................................... 395
Инкапсуляция вариаций................................................................................................. 395
Объекты как аргументы................................................................................................... 397
Должен ли обмен информацией быть инкапсулированным
или распределенным?...................................................................................................... 397
Разделение получателей и отправителей............................................................... 398
Резюме..................................................................................................................................... 400
Глава 6. Заключение....................................................................................................................... 402
6.1. Чего ожидать от паттернов проектирования ...................................................... 403
Единый словарь проектирования.............................................................................. 403
Помощь при документировании и изучении........................................................ 403
Дополнение существующих методов........................................................................ 404
Цель рефакторинга............................................................................................................ 405
6.2. Краткая история................................................................................................................. 407
6.3. Проектировщики паттернов........................................................................................ 408
Языки паттернов Александра....................................................................................... 408
Паттерны в программном обеспечении.................................................................. 410
6.4. Приглашение....................................................................................................................... 411
6.5. На прощание........................................................................................................................ 412
Приложение A. Глоссарий.......................................................................................................... 413
Приложение Б. Объяснение нотации................................................................................... 417
Б.1. Схема классов ..................................................................................................................... 418
Б.2. Схема объектов.................................................................................................................. 420
Б.3. Схема взаимодействий................................................................................................... 420
Приложение В. Фундаментальные классы......................................................................... 422
В.1. List............................................................................................................................................. 422
В.2. Iterator..................................................................................................................................... 425
В.3. ListIterator.............................................................................................................................. 425
В.4. Point......................................................................................................................................... 426
В.5. Rect........................................................................................................................................... 427
Библиография...................................................................................................... 428
Алфавитный указатель........................................................................................436