Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GrandM-Patterns_in_Java

.pdf
Скачиваний:
93
Добавлен:
14.03.2016
Размер:
8.88 Mб
Скачать

Раttегпs iп Java™,

Volume 1

А Catalog of ReusabIe

Design Patterns Illustrated with UML

Second Edition

MARK GRAND

WUey Publishing, Inc.

МАРК ГРАНД

ШАБЛОНЫ

проектирования в JAVA

Каталог

популярных шаблонов проектирования, проиллюстрированных при помоши UML

= ..

МОСКОА 000 «НОООII 3ВАНИII2004

===================

УДК 004.451 ББК 32.973.26-018.2

Г77

АН

Перевод с английского

С. Беликовой

 

Rights Reserved. Authorized translation from the English language edition

 

pubIished Ьу John Wiley & Sons, Inc.

Г77

Гранд М.

 

Шаблоны проектирования в Java / М. Гранд; Пер.

 

С англ . С. Беликовой. - М.: Новое знание, 2004.-

 

559 С.: ил.

 

 

ISBN 5-94735-047-5 (РУС.) .

 

ISBN 0-471-22729-3 (англ.).

 

Подробно рассмотрено применение в Java шаблонов проектирова­

 

ния (patterns). которые представляют собой многократно используе­

 

мые решения широко распространенных проблем. Продемонстриро­

 

вано, каким образом применение шаблонов повышает производитель­

 

ность работы программистов - и профессионалов, и начинаюших.

 

Приведен обзор языка UML

и описано 47 наиболее важных шаблонов

 

проектирования.

УДК 004.451

 

приложения на Java.

 

Книга предназначена для программистов, разрабатываюших

 

 

ББК 32.973.26-018.2

 

 

© 2002 Ьу Mark Grand. АН rights reserved.

ISBN 5-94735-047-5 (рус.)

© Перевод на русский язык, издание на

русском языке. оформление. 000 4НО­

ISBN 0-471-22729-3 (аигл.)

вое знание , 2004

........... ............ 107
109

ОГЛАВЛЕНИЕ

Благодарности ...........

 

..

. .................. ....

.. ... ........................ .......... .........

. 9

Об авторе

..... ...................

 

 

. .......... ..........

.............................................

11

r л а в а 1.

Введение в шаблоны проектирования ......... ........................

13

r л а в а 2. Обзор UML ........... ............

..................... .................... .....

19

r л а в а 3.

Жизненный цикл программного обеспечения ......................

41

r л а в а 4.

Основные шаблоны проектирования ......... ...... ........ ...........

61

Delegation (Делегирование)

 

62

Interface (Интерфейс)

.................................................................................

 

70

Abstract Superclass (

Абстрактный суперкласс)

75

 

.......................................

 

абстрактный....................................................класс)

80

Interface and Abstract Class (Интерфейс и

..................................................

 

Immutable (Неизменный)

интерфейс)

.....................

86

Marker Interface (Маркер-

 

91

.....................................................................................

 

 

Ргоху (Заместитель)

...............................................................................................................................................................

96

 

 

 

 

r л а в а 5. Порождающие шаблоны проектирования ..

Factory Method (Метод фабрики)

Abstract Factory (Абстрактная фабрика)

123

 

 

 

......................................................................

 

Builder (Строитель)

............................................................

132

 

 

)

 

142

Prototype (Прототип.....................................................................

........................

 

Singleton (Одиночка) ......... .

................................................................................

152

Object Рооl (Пул

объектов)

...............................................................................

162

..........................................................................................

 

 

 

 

 

r л а в а 6. Разделяющие шаблоны проектирования ...........................

181

Filter (Фильтр)

 

 

 

182

Composite (Компоновщик)

 

192

 

.......................... ..........................................................................

 

Read-Only Interface (Интерфейс, предназначенный только для чтения)

204

 

 

 

..... . . . . ... . . . .... . ................................................ ............

 

........

6Оглавление

r л а в а 7. Структурные шаблоны проектирования ............................

211

Adapter (Адаптер) . . .. . .... . . .. . . .. . ..

 

. .

 

..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. .. . ...

.

 

 

 

 

213

I

terato

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.. .

 

 

 

 

 

 

 

. . .. .. .

 

 

 

 

. . . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

222

 

 

r (Итератор). ... .... . ... . .. ... . . .... . . ...... . ... ..................... .. .... . ....

 

Bridge (Мост)

 

 

 

 

 

 

 

 

... .

..

. .............. ... . ... .. ........ ..... ...... . . ...................... ...

227

Facade

(Фасад)

 

 

 

 

 

 

 

 

 

 

 

 

 

.

..

 

 

 

 

. . .. .. .

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. .

 

 

 

 

240

 

 

 

 

 

 

 

 

 

 

.. ......

. .

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . .. .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . ..

 

 

 

 

 

 

 

 

 

 

 

 

Ayweight

 

 

 

Приспособленец) . .

 

 

 

. . . . .

 

 

 

 

 

. . ...

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

. .

 

 

 

248

 

 

 

 

 

 

 

(

 

 

 

 

.... .. . . .. .... . ........ .. . .. .

.

 

 

............. ............... . . .... . ...

 

Dynamic Linkage

 

 

 

Динамическая

 

.

 

 

 

. . . .

 

 

 

 

 

 

 

 

 

 

 

. .

 

 

 

 

. .

 

 

 

 

 

.

 

 

 

 

 

 

 

..

 

 

 

 

 

компоновка) .

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . 260

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

 

 

 

 

 

 

 

 

.. ... ...... . . . ... ........ .... . ............... .. ... ..

 

 

 

 

 

Virtual Proxy (Виртуальный заместитель)

 

 

 

............

 

 

 

 

 

 

.

 

..

 

 

.........

 

 

 

 

. .

.

.

...

 

.

..

.

..

 

.....

 

 

 

 

 

.

 

 

271

Decorator

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.. ..

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

280

 

 

 

 

 

 

 

 

(Декоратор) .

 

 

 

 

 

...

 

 

 

 

 

 

 

 

 

 

......................................

 

.... ...........

 

Cache Management

 

Упрамение

 

 

кэшем)

 

 

 

 

. . .

 

 

 

 

 

.

 

 

 

 

. .

. .

 

 

 

 

 

 

 

 

. .

 

 

287

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

. ..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

..

 

.............

 

 

 

 

 

 

................ .. . ......... ..... ....... ... ... .... .... ..

 

r л а в а

 

 

 

8.

Поведенческие шаблоны про....е....ктирования.. . .............

 

 

.....

 

...

 

 

..

.

...

 

...

 

.

 

.. .

 

 

 

 

 

...

309

 

 

 

 

........................

 

..... ..

 

.................

 

 

 

 

 

 

Chain of Responsibility (llепочка ответственности)

........

.

......

..

.

.

 

 

 

 

 

311

Command (Команда)

.

 

 

 

.

 

 

 

.

 

 

 

. .

 

 

. . .

..

 

 

 

 

 

.....

322

Little Language

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

 

 

 

.

 

 

..

 

 

 

 

. . . ..

 

 

. .

 

333

 

Малый язык) .

 

 

 

 

 

 

 

 

 

 

 

 

.. . .

 

 

 

 

 

. . . . . ..

 

 

. . .. .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

 

 

 

 

 

 

 

..

...........

 

 

 

......

 

 

 

 

......

 

 

 

...

 

 

...

 

.. .

.

 

 

..... .. ... .. ......... . ... . . . .

 

Mediator (Посредник) .

 

 

 

.... .............. ....... .. . ....... ... ..... ... ....

 

.... ...... . ..... ...

360

Snapshot

 

 

 

Моментальный снимок)

 

 

 

.

 

. . .

 

. . .

 

 

 

 

 

.

 

 

 

 

 

 

. . . .

 

 

 

 

 

 

. .

 

 

 

 

 

 

373

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. .. . . .

 

 

 

 

 

 

 

 

 

.. .. .

 

 

 

 

 

 

 

 

 

(

 

 

 

 

 

 

 

 

 

 

 

 

..

............

 

 

 

 

....

 

 

 

.......

 

 

 

 

..

 

 

. ... ............ . . .. . .. .... . ....... .....

 

Observer

(Наблюдатель)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. .. .

 

 

 

 

 

 

.

 

 

. . .

 

 

 

 

 

 

. .

 

 

 

 

 

 

 

 

 

 

 

 

391

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

..

 

.

...

 

 

..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. ...... .......... .... .... .. . . ... . ........... . .. .. ..

State (Состояние)

 

 

 

 

...........

 

 

 

..

....

.

 

 

.. ........ ... ..... ....

 

.. .... . .. . . . ......................... . .

..

401

Null Object

 

Нулевой объект)

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

. . .

 

 

 

. . . .. .

..

 

411

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

... . . ..... . . . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

 

 

 

 

 

 

 

........................

 

 

 

 

 

 

.

 

...

 

 

..........

 

 

 

 

 

. . .... ........ . .

 

 

 

 

.

 

 

. .... . ....... ... ... .. . ..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.. . .

 

..............................

 

Strategy (Стратегия)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . .

 

. ..

 

:

416

 

 

 

 

 

...................

.

 

 

 

 

 

 

 

 

 

 

.....

 

.

. . .....

 

 

 

 

 

 

 

.

.

.

..

 

..............

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

Template Method

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

. . . .

 

 

 

 

 

422

 

 

 

Метод шаблона) . . .

 

 

 

 

 

. . . ..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(

 

 

..................

 

 

 

 

 

 

..................... ... ...... .. .. .

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

Visitor

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Посетитель)

 

 

. ..

 

 

 

 

 

 

.. .. ... ........ ... .. ..

 

.. .... .............

 

.. . . . .

 

 

 

 

 

429

 

 

 

 

 

 

 

 

 

 

 

 

.... ... . ..... ....

r л а в а 9.

 

 

 

 

 

 

 

 

 

.......

 

...

 

............. .. . ..... ...... ..... ................... . . . ... ..... . ...

441

Шаблоны проектирования для конкурирующих операций

 

.

 

.

 

 

Single Threaded Execution (Однопоточное выполнение)

............................

.

.

..

... .

443

Lock Object (Объект блокировки)

 

 

.

 

..

.

 

 

. .

 

 

 

 

 

 

 

 

 

 

 

 

453

Guarded Suspension

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

. .

 

 

 

460

 

 

 

 

 

 

 

 

приостановка)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Охраняемая

 

...

 

...

 

 

 

 

... .... ................. .......... ............. .... ..

 

Balking (Отмена) .

 

 

. .

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

......... ................ ....... ...... .........

468

Scheduler

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. .

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

.

 

 

 

 

 

 

 

.

. .. .

 

 

 

 

.

 

 

 

 

 

 

.

 

473

 

 

 

 

 

 

 

(

 

 

 

 

 

 

 

 

 

....

 

....

......................

 

 

 

.

 

 

 

 

 

 

.....................

 

 

 

 

 

 

 

 

 

 

 

 

........

 

 

 

 

 

........

 

 

 

.. ...... . . .

 

.......... .

 

ReadjWrite Lock

(

Блокировка чтения/записи)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

483

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.......

 

 

......

 

 

 

 

.. .....................

 

 

 

 

 

 

 

 

 

. .

.............

 

 

 

 

 

 

 

 

 

 

 

.... .. .... ..... .......

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

. . ..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

. 493

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Пnnи RnлиТель-потребитель)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

... _-

_--

 

r

<'

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.... ............. .... .. ...... ............ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

...

 

......

 

 

 

 

 

..

 

 

...

 

......................

 

 

 

 

Огл а вление

Two-Phase Termination (Двухфазное завершение)

.........................................

ОоиЫе BufТering (Двойная буферизация) ......................................................

 

Asynchronous Processing (Асинхронная обработка) ......................................

..

Future (Будущее)

 

 

..... . . ...................................................................................... .

Список литера1J'PЫ .........................................................................

Предметный указатель ....................................................................

Об авторе

Марк Гранд, живущий в Атланте, - консультант с более чем 20-летним стажем. Он специализируется в области распределенных систем, объектно-ориентиро­ ванного проектирования и языка программирования Java. Он создавал архи­ тектуру первого коммерческого программного продукта для электронной ком­ мерции в интернете. В настоящее время он работает над открытой оболочкой, реализуюшей идею интеграции компонент и программ в пользовательское при­ ложение.

Самую большую известность Марку Гранду принес его бестселлер «Шаблоны проектирования в Java». Помимо преподавания языка Java в компании Sun

и образовательных учреждениях, Марк принимал участие в некоторых крупно­

масштабных коммерческих проектах, реализованных на Jауа.

До того как начать заниматься Java, Марк в течение 1 1 лет работал проекти­ ровщиком и разработчиком языков программирования четвертого поколения (4ац. Он занимал должность архитектора и руководителя проекта по выпуску продукции взаимного обмена электронными данными. Марк работал в организа­ циях, занимающихся разработками в области информационных технологий, выполняя функции архитектора программного обеспечения, баз данных, про­ ектировщика и администратора сетей, а также системного администратора в компании Sun. Начиная с 1982 года, он занимается объектно-ориентирован­ ным программированием и проектированием.

- АЛ ВЛ

Введение

вшабnоныпроектирования

llаблоны проектирования - это многократно используемые решения широко laспространенных проблем, возникаюших при разработке программного обес­ Iечения (ПО). Поскольку вся книга посвяшена шаблонам проектирования, да­ (ее они называются просто шаблоны.

10 мере приобретения опыта программисты признают сходство новых проблем : решаемыми ими ранее. С накоплением еше большего опыта приходит осозна­ ше того, что решения похожих проблем представляют собой повторяюшиеся uаблоны. Зная эти шаблоны, опытные программисты распознают ситуацию их Iрименения и сразу используют готовое решение, не тратя время на предвари­

'ельный анализ проблемы.

(огда прorраммист создает нужный шаблон, это заслуга его интуиции. В боль­ uинстве случаев путь от несформулированного интуитивного представления (о хорошо продуманной идеи, которую программист может четко выразить :ловами, на удивление труден. Это очень важный этап, потому что если про­ ]Jаммист настолько хорошо понимает шаблон проектирования, что может >писать его словами, то он в состоянии разумно комбинировать его с другими uаблонами. Еше важнее то, что однажды сформулированный шаблон может 1спользоваться и другими программистами, знакомыми с этим шаблоном. Это lOзволяет программистам эффективнее сотрудничать и объединять свои интел­ Iектуальные возможности. Кроме того, это помогает избежать ситуации, когда lрограммисты, обсуждая различные решения проблемы, только потом обнару­ кивают, что они имели в виду одно и то же решение, но выраженное разными

:yrпособами. Также, если шаблон описан, то более опытные программисты мо­ научить пользоваться им тех программистов, которые с ним не знакомы.

)сновная цель этой книги - предоставить программистам описание наиболее 1спользуемых шаблонов проектирования. Кроме того, благодаря этой книге lрограммисты могут сами открывать новые шаблоны.

I(отя в книге представлено довольно много шаблонов проектирования, сушест­уют и другие шаблоны. Некоторые из них могут показаться нужными только iебольшому кругу людей. Другие могут вызывать большой интерес. Читатели, келаюшие обсудить такие шаблоны, могут связаться с автором по электронной lOчте: mgrand@mindspring.com.

имя шаблона, под которым он широко известен. Если у шаблона несколько

14 Глава 1. Введение в шаблоны проектирования

Рассмотренные в книге шаблоны представляют собой конструктивные спосо­

бы организации некоторых частей цикла разработки ПО. Существуют другие

шаблоны, которые периодически повторяются в программах, но не являются

конструктивными. Они называются анmuшаблонамu, и так как могут свести на

нет всю пользу от применения шаблонов, то в этой книге они не описываются.

Шаблоны и антишаблоны кaжyrся похожими, но на самом деле различны по

своей сути. Цель шаблона - распознать возможность применения хорошего

решения проблемы. Назначение же антишаблона в том, чтобы выяснить суть

плохой ситуации и предЛОЖИТЬ решения.

Описание шаблонов

Обычношаблон описывается по следующей схеме:

имен, то они тоже приводятся;

описание проблемы, которое включает конкретный пример и решение,

специально предназначенное дЛя данной проблемы; краткое изложение рассуждений, приводящих или к формулированию об­

щего решения, или к выводу о его неприменимости;

общее рещение;

последствия, хорошие и плохие, как результат использования данного ре-

шения проблемы; перечень шаблонов проектирования, связанных с данным щаблоном.

Книги, посвященные шаблонам, различаются по способу представления этой

информации. Все представленные в данной книге шаблоны относятся к стадии проектирования жизненного цикла программы. Описание шаблонов организо­ вано в виде следующих разделов.

ИМЯ ШАБЛОНА

Заголовок параграфа содержит имя шаблона. У большинства шаблонов после названия дополнительный текст отсутствует. Если текст есть, то он представля­ ет собой другие имена шаблона или информацию о его ПРОИСХОЖдении и об­

щих характеристиках.

СИНОПСИС

В этом разделе приводится краткое описание шаблона. Синопсис передает суть

решения, предоставляемого шаблоном. Синопсис предназначен, в первую оче­

редь, дЛЯ опытных программистов, которые могут знать сам шаблон, но не

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]