- •197110, Санкт-Петербург, Чкаловский пр., 15.
- •Глава 1. Введение в паттерны проектирования 15
- •Глава 2. Проектирование редактора документов 39
- •Глава 3. Порождающие паттерны 75
- •Глава 4. Структурные паттерны 109
- •Глава 5. Паттерны поведения 173
- •Глава 6. Заключение 271
- •Предисловие
- •Глава 1. Введение в паттерны проектирования
- •1.1. Что такое паттерн проектирования
- •1.2. Паттерны проектирования в схеме mvc в языке Smalltalk
- •1.3. Описание паттернов проектирования
- •1.4. Каталог паттернов проектирования
- •1.5. Организация каталога
- •1.6. Как решать задачи проектирования с помощью паттернов
- •Поиск подходящих объектов
- •Определение степени детализации объекта
- •Специфицирование интерфейсов объекта
- •Специфицирование реализации объектов
- •Механизмы повторного использования
- •Сравнение структур времени выполнения и времени компиляции
- •Проектирование с учетом будущих изменений
- •1.7. Как выбирать паттерн проектирования
- •1.8. Как пользоваться паттерном проектирования
- •Глава 2. Проектирование редактора документов
- •2.1. Задачи проектирования
- •2.2. Структура документа
- •Рекурсивная композиция
- •Паттерн компоновщик
- •2.3. Форматирование
- •Инкапсуляция алгоритма форматирования
- •Классы Compositor и Composition
- •Стратегия
- •2.4. Оформление пользовательского интерфейса
- •Прозрачное обрамление
- •Моноглиф
- •Паттерн декоратор
- •2.5. Поддержка нескольких стандартов внешнего облика
- •Абстрагирование создания объекта
- •Фабрики и изготовленные классы
- •Паттерн абстрактная фабрика
- •2.6. Поддержка нескольких оконных систем
- •Можно ли воспользоваться абстрактной фабрикой?
- •Инкапсуляция зависимостей от реализации
- •Классы Window и WindowImp
- •Подклассы WindowImp
- •Конфигурирование класса Window с помощью WindowImp
- •Паттерн мост
- •2.7. Операции пользователя
- •Инкапсуляция запроса
- •Класс Command и его подклассы
- •Отмена операций
- •История команд
- •Паттерн команда
- •2.8. Проверка правописания и расстановка переносов
- •Доступ к распределенной информации
- •Инкапсуляция доступа и порядка обхода
- •Класс Iterator и его подклассы
- •Паттерн итератор
- •Обход, и действия выполняемые при обходе
- •Класс Visitor и его подклассы
- •Паттерн посетитель
- •2.9. Резюме
- •Глава 3. Порождающие паттерны
- •Паттерн Abstract Factory
- •Паттерн Builder
- •Паттерн Factory Method
- •Паттерн Prototype
- •Паттерн Singleton
- •Обсуждение порождающих паттернов
- •Глава 4. Структурные паттерны
- •Паттерн Adapter
- •Паттерн Bridge
- •Паттерн Composite
- •Паттерн Decorator
- •Паттерн Facade
- •Паттерн Flyweight
- •Паттерн Proxy
- •Обсуждение структурных паттернов
- •Адаптер и мост
- •Компоновщик, декоратор и заместитель
- •Глава 5. Паттерны поведения
- •Паттерн Chain of Responsibility
- •Паттерн Command
- •Паттерн Interpreter
- •Паттерн Iterator
- •Паттерн Mediator
- •Паттерн Memento
- •Паттерн Observer
- •Паттерн State
- •Паттерн Strategy
- •Паттерн Template Method
- •Паттерн Visitor
- •Обсуждение паттернов поведения Инкапсуляция вариаций
- •Объекты как аргументы
- •Должен ли обмен информацией быть инкапсулированным или распределенным
- •Разделение получателей и отправителей
- •Глава 6. Заключение
- •6.1. Чего ожидать от паттернов проектирования
- •Единый словарь проектирования
- •Помощь при документировании и изучении
- •Дополнение существующих методов
- •Цель реорганизации
- •6.2. Краткая история
- •6.3. Проектировщики паттернов
- •Языки паттернов Александра
- •Паттерны в программном обеспечении
- •6.4. Приглашение
- •6.5. На прощание
- •Приложение а. Глоссарий
- •Приложение в. Объяснение нотации
- •В.1. Диаграмма классов
- •В.2. Диаграмма объектов
- •В.3. Диаграмма взаимодействий
- •Приложение с. Базовые классы
- •Библиография
- •Алфавитный указатель
Глава 2. Проектирование редактора документов 39
2.1. Задачи проектирования 39
2.2. Структура документа 41
Рекурсивная композиция 41
Глифы 43
Паттерн компоновщик 44
2.3. Форматирование 45
Инкапсуляция алгоритма форматирования 45
Классы Compositor и Composition 46
Стратегия 47
2.4. Оформление пользовательского интерфейса 47
Прозрачное обрамление 48
Моноглиф 48
Паттерн декоратор 50
2.5. Поддержка нескольких стандартов внешнего облика 51
Абстрагирование создания объекта 51
Фабрики и изготовленные классы 52
Паттерн абстрактная фабрика 54
2.6. Поддержка нескольких оконных систем 54
Можно ли воспользоваться абстрактной фабрикой? 54
Инкапсуляция зависимостей от реализации 54
Классы Window и WindowImp 56
Подклассы WindowImp 57
Конфигурирование класса Window с помощью WindowImp 58
Паттерн мост 59
2.7. Операции пользователя 60
Инкапсуляция запроса 60
Класс Command и его подклассы 61
Отмена операций 62
История команд 62
Паттерн команда 63
2.8. Проверка правописания и расстановка переносов 64
Доступ к распределенной информации 64
Инкапсуляция доступа и порядка обхода 64
Класс Iterator и его подклассы 65
Паттерн итератор 68
Обход, и действия выполняемые при обходе 68
Класс Visitor и его подклассы 71
Паттерн посетитель 72
2.9. Резюме 73
Глава 3. Порождающие паттерны 75
Паттерн Abstract Factory 77
Паттерн Builder 83
Паттерн Factory Method 89
Паттерн Prototype 96
Паттерн Singleton 102
Обсуждение порождающих паттернов 107
Глава 4. Структурные паттерны 109
Паттерн Adapter 110
Паттерн Bridge 119
Паттерн Composite 127
Паттерн Decorator 136
Паттерн Facade 144
Паттерн Flyweight 151
Паттерн Proxy 161
Обсуждение структурных паттернов 169
Адаптер и мост 169
Компоновщик, декоратор и заместитель 170
Глава 5. Паттерны поведения 173
Паттерн Chain of Responsibility 173
Паттерн Command 181
Паттерн Interpreter 189
Паттерн Iterator 200
Паттерн Mediator 211
Паттерн Memento 219
Паттерн Observer 226
Паттерн State 235
Паттерн Strategy 242
Паттерн Template Method 250
Паттерн Visitor 254
Обсуждение паттернов поведения 266
Инкапсуляция вариаций 266
Объекты как аргументы 267
Должен ли обмен информацией быть инкапсулированным или распределенным 267
Разделение получателей и отправителей 268
Резюме 269
Глава 6. Заключение 271
6.1. Чего ожидать от паттернов проектирования 271
Единый словарь проектирования 271
Помощь при документировании и изучении 272
Дополнение существующих методов 272
Цель реорганизации 272
6.2. Краткая история 273
6.3. Проектировщики паттернов 274
Языки паттернов Александра 274
Паттерны в программном обеспечении 275
6.4. Приглашение 276
6.5. На прощание 276
Приложение А. Глоссарий 278
Приложение В. Объяснение нотации 281
В.1. Диаграмма классов 281
В.2. Диаграмма объектов 282
В.3. Диаграмма взаимодействий 283
Приложение С. Базовые классы 284
C.1. List 284
С.2. Iterator 287
С.З. ListIterator 287
С.4. Point 287
С.5. Rect 288
Библиография 290
Алфавитный указатель 295