Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku.pdf

(10246 KB) Pobierz
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
WZORCE
PROJEKTOWE
Elementy oprogramowania
obiektowego wielokrotnego użytku
B e l® «
S
pis t r e ś c i
Przedmowa .................................................................................................................................. 9
Wstęp .....................................................................................................................................................11
Przewodnik dla Czytelników ................................................................................................ 13
Rozdział 1.
Wprowadzenie .......................................................................................................................... 15
1.1. Czym jest wzorzec projektow y?.....................................................................................16
1.2. Wzorce projektowe w architekturze MVC w języku Smalltalk.............................. 18
1.3. Opisywanie wzorców projektow ych............................................................................20
1.4. Katalog wzorców projektow ych.................................................................................... 22
1.5. Struktura katalogu ............................................................................................................ 24
1.6. Jak wzorce pomagają rozwiązać problemy projektowe? .........................................26
1.7. Jak wybrać wzorzec projektow y?.................................................................................. 42
1.8. Jak stosować wzorce projektowe? ................................................................................. 43
Studium przypadku — projektowanie edytora dokumentów ...................................... 45
2.1. Problemy projektowe ....................................................................................................... 45
2.2. Struktura dokum entu....................................................................................................... 47
2.3. Form atow anie.....................................................................................................................52
2.4. Ozdabianie interfejsu użytkownika.............................................................................. 55
2.5. Obsługa wielu standardów wyglądu i działania ....................................................... 59
2.6. Obsługa wielu systemów okienkowych.......................................................................63
2.7. Działania użytkowników.................................................................................................69
2.8. Sprawdzanie pisowni i podział słów ............................................................................ 74
2.9. Podsumowanie .................................................................................................................. 86
Wzorce konstrukcyjne.............................................................................................................. 87
BUDOWNICZY (BU ILD ER ).................................................................................................92
FABRYKA ABSTRAKCYJNA (ABSTRACT FACTORY) ......................................... 101
METODA WYTWÓRCZA .................................................................................................. 110
PROTOTYP (PROTOTYPE) ............................................................................................... 120
SINGLETON (SINGLETON) .............................................................................................. 130
Omówienie wzorców konstrukcyjnych ............................................................................ 137
Rozdział 2.
Rozdział 3.
8
SPIS TREŚCI
Rozdział 4.
Wzorce strukturalne............................................................................................................... 139
ADAPTER (ADAPTER) ....................................................................................................... 141
DEKORATOR (DECORATOR) ..........................................................................................152
FASADA (FACADE) ..............
161
KOMPOZYT (COMPOSITE) .............................................................................................. 170
MOST (BRIDGE) ....................................................................................................................181
PEŁNOMOCNIK (P R O X Y )..................................................................................................191
PYŁEK (FLYWEIGHT) ........................................................................................................ 201
Omówienie wzorców strukturalnych................................................................................ 213
Rozdział 5.
Wzorce operacyjne .................................................................................................................215
INTERPRETER (INTERPRETER) .....................................................................................217
ITERATOR (ITERA TO R).....................................................................................................230
ŁAŃCUCH ZOBOWIĄZAŃ (CHAIN OF RESPONSIBILITY)....................................... 244
MEDIATOR (MEDIATOR) ................................................................................................. 254
METODA SZABLONOWA (TEMPLATE METHOD) ................................................. 264
OBSERWATOR (O B S E R V E R ).......................................................................................... 269
ODWIEDZAJĄCY (VISITOR) ............................................................................................280
PAMIĄTKA (M EM EN TO ).................................................................................................. 294
POLECENIE (COMMAND) ................................................................................................ 302
STAN (STATE) ...................................................................................................................... 312
STRATEGIA (STRATEGY) ................................................................................................ 321
Omówienie wzorców operacyjnych .................................................................................. 330
Rozdział 6.
Podsumowanie........................................................................................................................ 335
6.1. Czego można oczekiwać od wzorców projektowych? ........................................... 335
6.2. Krótka historia ..................................................................................................................339
6.3. Społeczność związana ze w zorcam i............................................................................ 340
6.4. Zaproszenie.......................................................................................................................342
6.5. Słowo na zakończenie .................................................................................................... 342
Słow niczek............................................................................................................................... 343
Przewodnik po n o ta cji...........................................................................................................347
B.l. Diagram klas .....................................................................................................................347
B.2. Diagram obiektów .......................................................................................................... 349
B.3. Diagram interakcji .......................................................................................................... 350
Klasy podstawowe..................................................................................................................351
C l. L ist............................................................................:......................................................... 351
C.2. Iterator............................................................................................................................... 354
C.3. Listlterator ........................................................................................................................354
C.4. P o in t................................................................................................................................... 355
C.5. Rect .................................................................................................................................... 355
Bibliografia .............................................................................................................................. 357
Skorowidz ................................................................................................................................ 363
Dodatek A
Dodatek B
Dodatek C
P
rzedm ow a
Książka ta nie jest wprowadzeniem do technologii obiektowych lub projektowania w tym pa­
radygmacie. Istnieje wiele dobrych pozycji poświęconych tym zagadnieniom. Zakładamy, że
dobrze znasz przynajmniej jeden obiektowy język programowania, a także masz pewne do­
świadczenie w projektowaniu obiektowym. Z pewnością nie powinieneś musieć zaglądać do
słownika, kiedy wspominamy o „typach" i „polimorfizmie" lub dziedziczeniu „interfejsów" (a nie
„implementacj i").
Z drugiej strony nie jest to też zaawansowana rozprawa techniczna. Jest to książka o wzorcach
projektowych opisująca proste i eleganckie rozwiązania specyficznych problemów w obszarze
projektowania oprogramowania obiektowego. Wzorce projektowe to rozwiązania, które opra­
cowywano i modyfikowano przez długi czas. Dlatego nie są to rozwiązania, które ludzie wy­
myślają od razu. Wzorce odzwierciedlają długie godziny przekształcania projektów i wpro­
wadzania zmian w kodzie przez programistów, którzy usilnie starali się zwiększyć elastyczność
i możliwość wielokrotnego wykorzystania rozwijanego oprogramowania. Wzorce projektowe
ujmują te rozwiązania w zwięzłej i łatwej do zastosowania formie.
Wzorce projektowe nie wymagają korzystania ani z niestandardowych funkcji języka, ani
z niezwykłych sztuczek programistycznych, którymi można zadziwić współpracowników
i przełożonych. Wszystkie wzorce można zastosować za pomocą standardowych języków
obiektowych, choć czasem trzeba włożyć w to nieco więcej pracy niż przy implementowaniu
doraźnych rozwiązań. Jednak dodatkowy wysiłek z pewnością się opłaci z uwagi na większą
elastyczność i możliwość powtórnego wykorzystania oprogramowania.
Kiedy zrozumiesz wzorce projektowe i będziesz mógł powiedzieć „Aha!" (a nie tylko: „O co
chodzi?"), na zawsze przestaniesz myśleć o projektowaniu obiektowym w dawny sposób. Za­
czniesz dostrzegać rozwiązania, dzięki którym Twoje projekty staną się elastyczniejsze, bardziej
modularne, zrozumiałe i nadające się do wielokrotnego użytku. W końcu dlatego interesuje
Cię programowanie obiektowe, prawda?
Słowo ostrzeżenia i zachęty — nie martw się, jeśli w czasie czytania tej książki po raz pierwszy
nie zrozumiesz jej w pełni. Nam samym się to nie udało, kiedy ją pisaliśmy! Pamiętaj, że nie
jest to pozycja, którą należy raz przeczytać i odłożyć na półkę. Mamy nadzieję, że będziesz
wciąż do niej wracał po pomysły projektowe i inspirację.
10
PRZEDMOW A
Książka ta powstawała przez długi czas. Odwiedziła z nami cztery kraje, widziała trzy śluby
autorów i narodziny dwóch (niespokrewnionych) potomków. Wiele osób uczestniczyło w jej
powstawaniu. Specjalne podziękowania należą się Bruce'owi Andersonowi, Kentowi Beckowi
i André Weinandowi za inspirację i porady. Dziękujemy też wszystkim, którzy oceniali wersje
wstępne książki. Byli to: Roger Bielefeld, Grady Booch, Tom Cargill, Marshall Cline, Ralph Hyre,
Brian Kernighan, Thomas Laliberty, Mark Lorenz, Arthur Riel, Doug Schmidt, Clovis Tondo,
Steve Vinoski i Rebecca Wirfs-Brock. Jesteśmy także wdzięczni za pomoc i cierpliwość zespo­
łowi z wydawnictwa Addison-Wesley. W jego skład wchodzili: Kate Habib, Tiffany Moore, Lisa
Raffaele, Pradeepa Siva i John Wait. Specjalne podziękowania składamy Carlowi Kesslerowi,
Danny'emu Sabbah i Markowi Wegmanowi z IBM Research za niesłabnące wsparcie prac nad
tą książką.
Na zakończenie — choć równie gorąco — dziękujemy wszystkim ludziom, którzy przez inter­
net i innymi kanałami przesyłali do nas komentarze na temat różnych wersji wzorców i słowa
zachęty, a także informowali nas, że to, co robimy, jest cenne. Te osoby to między innymi: Jon
Avotins, Steve Berczuk, Julian Berdych, Matthias Bohlen, John Brant, Allan Clarke, Paul Chis­
holm, Jens Coldewey, Dave Collins, Jim Coplien, Don Dwiggins, Gabriele Elia, Doug Felt,
Brian Foote, Denis Fortin, Ward Harold, Hermann Hueni, Nayeem Islam, Bikramjit Kalra, Paul
Keefer, Thomas Kofler, Doug Lea, Dan LaLiberte, James Long, Ann Louise Luu, Pundi Madhavan,
Brian Marick, Robert Martin, Dave McComb, Carl McConnell, Christine Mingins, Hanspeter
Môssenbôck, Eric Newton, Marianne Ozkan, Roxsan Payette, Larry Podmolik, George Radin,
Sita Ramakrishnan, Russ Ramirez, Alexander Ran, Dirk Riehle, Bryan Rosenberg, Aamod Sane,
Duri Schmidt, Robert Seidl, Xin Shu i Bill Walker.
Nie uważamy, że opisana tu kolekcja wzorców projektowych jest kompletna i niezmienna.
Jest to bardziej zapis naszych obecnych przemyśleń na temat projektowania. Chętnie usły­
szymy komentarze na ich temat — krytykę przedstawionych przykładów, odwołania i znane
zastosowania, które pominęliśmy, a także wzorce warte dodania. Można się z nami skon­
taktować za pośrednictwem wydawnictwa Addison-Wesley lub wysyłając e-mail na adres
design-patterns@ cs.uiuc.edu.
Można też otrzymać elektroniczną wersję kodu źródłowego
z punktów „Przykładowy kod" przez wysłanie wiadomości „send design pattern source" na
adres
design-patterns-source@cs.uiuc.edu.
Najnowsze informacje i aktualizacje znajdują się
obecnie na stronie
http://st-www.cs.illinois.edu/users/patterns/DPBook/DPBook.html.
Mountain View, Kalifornia
Montreal, Quebec
Urbana, Illinois
Hawthorne, Nowy Jork
Sierpień 1994
E. G.
R. H.
R. J.
J. V.
Zgłoś jeśli naruszono regulamin