Скачать 5.49 Mb.
|
Design Patterns Elements of Reusable Object-Oriented Software Addison-Wesley An imprint of Addison Wesley Longman, Inc. Reading, Masachusetts • Harlow, England • Menlo Park, California Berkley, California • Don Mills, Ontario • Sydney Bonn • Amsterdam • Tokyo • Mexico City Э. Гамма │ Р. Хелм │ Р. Джонсон │ Дж. Влиссидес Приемы объектно- ориентированного проектирования ____________________________ паттерны проектирования Санкт-Петербург Москва • Харьков • Минск 2001 Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес Приемы объектно-ориентированного проектирования Паттерны проектирования Перевел с английского А. Слинкин Руководитель проекта И. Захаров Научный редактор Н. Шалаев Литературный редактор А. Петроградская Технический редактор С. Прока Иллюстрации А. Бахарев Художник Н. Биржаков Верстка Л. Пискунова ББК 32.973.2-018 УДК 681.3.068 Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. П75 Приемы объектно-ориентированного проектирования. Паттерны проектирования. – СПб: Питер, 2001. – 368 с: ил. (Серия «Библиотека программиста») ISBN 5-272-00355-1 В предлагаемой книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны появились потому, что многие разработчики искали пути повышения гибкости и степени повторного использования своих программ. Найденные решения воплощены в краткой и легко применимой на практике форме. Авторы излагают принципы использования паттернов проектирования и приводят их каталог. Таким образом, книга одновременно решает две задачи. Во-первых, здесь демонстрируется роль паттернов в создании архитектуры сложных систем. Во-вторых, применяя содержащиеся в справочнике паттерны, проектировщик сможет с легкостью разрабатывать собственные приложения. Издание предназначено как для профессиональных разработчиков, так и для программистов, осваивающих объектно-ориентированное проектирование. Original English language Edition Copyright © 1995 by Addison Wesley Longman, Inc. © Перевод на русский язык, А. Слинкин, 2001 ©Серия, оформление. Издательский дом «Питер», 2001 Оригинал-макет подготовлен издательством «ДМК Пресс». Права на издание получены по соглашению с Addison-Wesley Longman. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственность за возможные ошибки, связанные с использованием книги. ISBN 5-272-00355-1 ISBN 0-201-63361-2 (англ.) ЗАО «Питер Бук». 196105, Санкт-Петербург, Благодатная ул., д. 67. Лицензия ИД № 01940 от 05.06.00. Налоговая льгота – общероссийский классификатор продукции ОК 005-93, том 2; 953000 – книги и брошюры. Подписано в печать 08.10.00. Формат 70x100 Усл. п. л. 29,67. Тираж 5000 экз. Заказ № 1997. Отпечатано с готовых диапозитивов в ГПП «Печатный двор» Министерства РФ по делам печати, телерадиовещания и средств массовых коммуникаций. 197110, Санкт-Петербург, Чкаловский пр., 15. Посвящается Кэрин – Э. Гамма Сильвии – Р. Хелм Фейт – Р. Джонсон Дрю Энн и Мэттью Джошуа 24:15b – Дж. Влиссидес Отзывы на книгу «Design Patterns: Elements of Reusable Object-Oriented Software» Одна из самых хорошо написанных и глубоких книг, которые мне доводилось читать... эта работа доказывает необходимость паттернов самым правильным способом: не рассуждениями, а примерами. Стэн Липпман, The C++ Report ...Новая книга Гаммы, Хелма, Джонсона и Влиссидеса окажет важное и продолжительное воздействие на науку проектирования программного обеспечения. Поскольку авторы преподносят свой труд как относящийся только к объектно-ориентированным программам, боюсь, что многие разработчики, не занимающиеся объектной проблематикой, могут не обратить на книгу внимания. Это будет большой ошибкой. На самом деле каждый, кто занимается проектированием программ, найдет здесь много интересного для себя. Все проектировщики применяют паттерны, поэтому более глубокое понимание повторно используемых абстракций лишь пойдет нам на пользу. Том ДеМарко, IEEE Software Полагаю, что книга чрезвычайно ценна, поскольку описывает богатейший опыт объектно-ориентированного проектирования, изложенный в компактной, удобной для многократного применения форме. Безусловно, я снова и снова буду обращаться к идеям, представленным в издании, а ведь именно в этом и состоит суть повторного использования, не так ли? Санджив Госсайн, Journal of Object-Oriented Programming Эта книга, столь давно ожидаемая, полностью оправдала все предшествовавшие ей рекламные посулы. Она подобна справочнику архитектора, в котором приведены проверенные временем, испытанные на практике приемы и методы проектирования. Всего авторы отобрали 23 паттерна. Подарите экземпляр этой книги каждому из своих знакомых программистов, желающему усовершенствоваться в своей профессии. Ларри О'Брайен, Software Development Следует признать, что паттерны могут полностью изменить подходы к инженерному проектированию программ, привнеся в эту область изящество по-настоящему элегантного дизайна. Из всех имеющихся книг на эту тему «Паттерны проектирования», безусловно, лучшая. Ее следует читать, изучать и переводить на другие языки. Она раз и навсегда изменит ваш взгляд на программное обеспечение. Стив Билов, Journal of Object-Oriented Programming «Паттерны проектирования» – замечательная книга. Потратив на ее чтение сравнительно немного времени, большинство программистов на языке C++ смогут начать применять паттерны в своей работе, что улучшит качество создаваемых ими программ. Эта книга передает в наше распоряжение конкретные инструменты, помогающие более эффективно мыслить и выражать свои идеи. Она может фундаментально изменить ваш взгляд на программирование. Том Каргилл, The C++ Report СОДЕРЖАНИЕ Предисловие 10 Глава 1. Введение в паттерны проектирования 15 1.1. Что такое паттерн проектирования 16 1.2. Паттерны проектирования в схеме MVC в языке Smalltalk 17 1.3. Описание паттернов проектирования 19 1.4. Каталог паттернов проектирования 21 1.5. Организация каталога 23 1.6. Как решать задачи проектирования с помощью паттернов 25 Поиск подходящих объектов 25 Определение степени детализации объекта 26 Специфицирование интерфейсов объекта 26 Специфицирование реализации объектов 27 Механизмы повторного использования 30 Сравнение структур времени выполнения и времени компиляции 34 Проектирование с учетом будущих изменений 35 1.7. Как выбирать паттерн проектирования 39 1.8. Как пользоваться паттерном проектирования 40 Глава 2. Проектирование редактора документов 43 2.1. Задачи проектирования 43 2.2. Структура документа 45 Рекурсивная композиция 46 Глифы 47 Паттерн компоновщик 49 2.3. Форматирование 49 Инкапсуляция алгоритма форматирования 50 Классы Compositor и Composition 50 Стратегия 52 2.4. Оформление пользовательского интерфейса 52 Прозрачное обрамление 52 Моноглиф 53 Паттерн декоратор 55 2.5. Поддержка нескольких стандартов внешнего облика 56 Абстрагирование создания объекта 56 Фабрики и изготовленные классы 57 Паттерн абстрактная фабрика 59 2.6. Поддержка нескольких оконных систем 59 Можно ли воспользоваться абстрактной фабрикой? 60 Инкапсуляция зависимостей от реализации 60 Классы Window и WindowImp 62 Подклассы WindowImp 63 Конфигурирование класса Window с помощью WindowImp 64 Паттерн мост 65 2.7. Операции пользователя 66 Инкапсуляция запроса 67 Класс Command и его подклассы 68 Отмена операций 69 История команд 69 Паттерн команда 70 2.8. Проверка правописания и расстановка переносов 70 Доступ к распределенной информации 71 Инкапсуляция доступа и порядка обхода 71 Класс Iterator и его подклассы 73 Паттерн итератор 75 Обход, и действия выполняемые при обходе 75 Класс Visitor и его подклассы 79 Паттерн посетитель 80 2.9. Резюме 81 Глава 3. Порождающие паттерны 83 Паттерн Abstract Factory 87 Паттерн Builder 95 Паттерн Factory Method 103 Паттерн Prototype 112 Паттерн Singleton 121 Обсуждение порождающих паттернов 127 Глава 4. Структурные паттерны 129 Паттерн Adapter 130 Паттерн Bridge 140 Паттерн Composite 149 Паттерн Decorator 159 Паттерн Facade 168 Паттерн Flyweight 176 Паттерн Proxy 186 Обсуждение структурных паттернов 196 Адаптер и мост 196 Компоновщик, декоратор и заместитель 197 Глава 5. Паттерны поведения 200 Паттерн Chain of Responsibility 200 Паттерн Command 209 Паттерн Interpreter 219 Паттерн Iterator 230 Паттерн Mediator 243 Паттерн Memento 252 Паттерн Observer 260 Паттерн State 269 Паттерн Strategy 278 Паттерн Template Method 286 Паттерн Visitor 290 Обсуждение паттернов поведения 303 Инкапсуляция вариаций 303 Объекты как аргументы 303 Должен ли обмен информацией быть инкапсулированным или распределенным 304 Разделение получателей и отправителей 304 Резюме 306 Глава 6. Заключение 308 6.1. Чего ожидать от паттернов проектирования 308 Единый словарь проектирования 308 Помощь при документировании и изучении 309 Дополнение существующих методов 309 Цель реорганизации 310 6.2. Краткая история 311 6.3. Проектировщики паттернов 312 Языки паттернов Александра 312 Паттерны в программном обеспечении 313 6.4. Приглашение 313 6.5. На прощание 314 Приложение А. Глоссарий 316 Приложение В. Объяснение нотации 320 В.1. Диаграмма классов 320 В.2. Диаграмма объектов 321 В.3. Диаграмма взаимодействий 322 Приложение С. Базовые классы 324 C.1. List 324 С.2. Iterator 327 С.З. ListIterator 327 С.4. Point 327 С.5. Rect 328 Библиография 331 Алфавитный указатель 337 |