GrandM-Patterns_in_Java
.pdfРа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 |
ОГЛАВЛЕНИЕ
Благодарности ........... |
|
.. |
. .................. .... |
.. ... ........................ .......... ......... |
. 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ся похожими, но на самом деле различны по
своей сути. Цель шаблона - распознать возможность применения хорошего
решения проблемы. Назначение же антишаблона в том, чтобы выяснить суть
плохой ситуации и предЛОЖИТЬ решения.
Описание шаблонов
Обычно• шаблон описывается по следующей схеме:
•имен, то они тоже приводятся;
описание проблемы, которое включает конкретный пример и решение,
•специально предназначенное дЛя данной проблемы; краткое изложение рассуждений, приводящих или к формулированию об
•щего решения, или к выводу о его неприменимости;
•общее рещение;
последствия, хорошие и плохие, как результат использования данного ре-
•шения проблемы; перечень шаблонов проектирования, связанных с данным щаблоном.
Книги, посвященные шаблонам, различаются по способу представления этой
информации. Все представленные в данной книге шаблоны относятся к стадии проектирования жизненного цикла программы. Описание шаблонов организо вано в виде следующих разделов.
ИМЯ ШАБЛОНА
Заголовок параграфа содержит имя шаблона. У большинства шаблонов после названия дополнительный текст отсутствует. Если текст есть, то он представля ет собой другие имена шаблона или информацию о его ПРОИСХОЖдении и об
щих характеристиках.
СИНОПСИС
В этом разделе приводится краткое описание шаблона. Синопсис передает суть
решения, предоставляемого шаблоном. Синопсис предназначен, в первую оче
редь, дЛЯ опытных программистов, которые могут знать сам шаблон, но не