Poznaj w niekonwencjonalny sposób zasady stosowania wzorców projektowych
* Dowiedz się, czym są wzorce projektowe
* Poznaj typy wzorców projektowych
* Zastosuj wzorce projektowe w praktyce
* Naucz się projektować aplikacje w oparciu o wzorce projektowe
Otwórz swój umysł. Poznaj wszystko, co jest związane z wzorcami projektowymi, w sposób gwarantujący szybkie i skuteczne opanowanie zasad ich stosowania. Zapomnij o listingach liczących tysiące linii, długich i nużących opisach teoretycznych oraz rozbudowanych schematach zależności. Czytając książkę "Head First Design Patterns. Edycja polska", poznasz wzorce projektowe w inny sposób. Wzorce projektowe to gotowe opisy rozwiązań najczęściej spotykanych zagadnień związanych z tworzeniem oprogramowania. Aby je prawidłowo stosować, należy poznać założenia, na podstawie których zostały stworzone, oraz nauczyć się implementować je we właściwy sposób.
Dzięki książce "Head First Design Pattern. Edycja polska" wszystkie pojęcia związane ze wzorcami projektowymi przestaną być dla Ciebie wiedzą tajemną. Autorzy książki, wykorzystując najnowsze elementy teorii uczenia, przedstawią Ci wszystkie zagadnienia niezbędne do rozpoczęcia projektowania i tworzenia aplikacji w oparciu o wzorce projektowe. Poznasz najczęściej stosowane wzorce projektowe, metody ich implementacji i zadania, do jakich są przeznaczone. Jednak, co najważniejsze, nauczysz się stosować tę wiedzę w praktyce.
* Cele stosowania wzorców projektowych
* Założenia, na których opierają się wzorce projektowe
* Najważniejsze i najczęściej wykorzystywane wzorce projektowe
* Przechowywanie i prezentacja danych
* Mechanizm RMI
* Wzorzec MVC
* Implementacja wzorców projektowych w aplikacjach
Przekonaj się, że nowoczesne metody nauczania mogą zmienić również sposób poznawania nowoczesnych technik programistycznych.
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI Head First Design
Patterns. Edycja polska
KATALOG KSI¥¯EK
Autorzy: Eric Freeman, Elisabeth Freeman
KATALOG ONLINE T³umaczenie: Pawe³ Koronkiewicz (wprowadzenie,
rozdz. 1–8), Grzegorz Kowalczyk (rozdz. 9–14)
ISBN: 83-7361-792-2
ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: Head First Design Patterns
Format: 200×230, stron: 656
TWÓJ KOSZYK
Poznaj w niekonwencjonalny sposób zasady stosowania wzorców projektowych
DODAJ DO KOSZYKA
• Dowiedz siê, czym s¹ wzorce projektowe
• Poznaj typy wzorców projektowych
CENNIK I INFORMACJE • Zastosuj wzorce projektowe w praktyce
• Naucz siê projektowaæ aplikacje w oparciu o wzorce projektowe
ZAMÓW INFORMACJE Otwórz swój umys³. Poznaj wszystko, co jest zwi¹zane z wzorcami projektowymi,
O NOWO CIACH w sposób gwarantuj¹cy szybkie i skuteczne opanowanie zasad ich stosowania.
Zapomnij o listingach licz¹cych tysi¹ce linii, d³ugich i nu¿¹cych opisach teoretycznych
ZAMÓW CENNIK oraz rozbudowanych schematach zale¿no ci. Czytaj¹c ksi¹¿kê „Head First Design
Patterns. Edycja polska”, poznasz wzorce projektowe w inny sposób. Wzorce projektowe
to gotowe opisy rozwi¹zañ najczê ciej spotykanych zagadnieñ zwi¹zanych z tworzeniem
CZYTELNIA oprogramowania. Aby je prawid³owo stosowaæ, nale¿y poznaæ za³o¿enia, na podstawie
których zosta³y stworzone, oraz nauczyæ siê implementowaæ je we w³a ciwy sposób.
FRAGMENTY KSI¥¯EK ONLINE Dziêki ksi¹¿ce „Head First Design Pattern. Edycja polska” wszystkie pojêcia zwi¹zane
ze wzorcami projektowymi przestan¹ byæ dla Ciebie wiedz¹ tajemn¹. Autorzy ksi¹¿ki,
wykorzystuj¹c najnowsze elementy teorii uczenia, przedstawi¹ Ci wszystkie zagadnienia
niezbêdne do rozpoczêcia projektowania i tworzenia aplikacji w oparciu o wzorce
projektowe. Poznasz najczê ciej stosowane wzorce projektowe, metody ich
implementacji i zadania, do jakich s¹ przeznaczone. Jednak, co najwa¿niejsze,
nauczysz siê stosowaæ tê wiedzê w praktyce.
• Cele stosowania wzorców projektowych
• Za³o¿enia, na których opieraj¹ siê wzorce projektowe
• Najwa¿niejsze i najczê ciej wykorzystywane wzorce projektowe
• Przechowywanie i prezentacja danych
Wydawnictwo Helion • Mechanizm RMI
ul. Chopina 6 • Wzorzec MVC
44-100 Gliwice • Implementacja wzorców projektowych w aplikacjach
tel. (32)230-98-63 Przekonaj siê, ¿e nowoczesne metody nauczania mog¹ zmieniæ równie¿ sposób
e-mail: helion@helion.pl poznawania nowoczesnych technik programistycznych.
2. Spis treści (skrócony)
Wprowadzenie 21
1. Witamy w krainie wzorców projektowych: wprowadzenie 33
2. Jak sprawić by Twoje obiekty
były zawsze dobrze poinformowane: Wzorzec Obserwator 67
3. Dekorowanie zachowania obiektów: Wzorzec Dekorator 109
4. Pizzeria zorientowana obiektowo: Wzorzec Fabryka 139
5. Obiekty jedyne w swoim rodzaju: Wzorzec Singleton 197
6. Hermetyzacja wywołań: Wzorzec Polecenie 217
7. Zdolność do adaptacji: Wzorce Adapter oraz Fasada 259
8. Hermetyzacja algorytmów: Wzorzec Metoda Szablownowa 297
9. Zarządzanie kolekcjami: Wzorce Iterator i Kompozyt 335
10. Stan obiektu: Wzorzec Stan 403
11. Kontrola dostępu do obiektu: Wzorzec Proxy 447
12. Łączenie wzorców: Wzorce złożone 517
13. Wzorce projektowe w praktyce: Nowe życie z wzorcami 595
14. Dodatek: inne wzorce 629
Skorowidz 649
Spis treści (na serio)
Wprowadzenie
Twój mózg jest skoncentrowany na wzorcach projektowych.
W tym rozdziale Ty starasz się czegoś dowiedzieć, a Twój mózg robi Ci przysługę i nie przykłada się
do zapamiętywania zdobywanej wiedzy. Twój mózg myśli sobie: „Lepiej zostawię miejsce w pamięci
na bardziej istotne informacje, na przykład: jakich dzikich zwierząt należy unikać bądź czy jeżdżenie nago
na snowboardzie jest dobrym pomysłem”. A zatem, w jaki sposób możesz przekonać swój mózg, że Twoje
życie zależy od poznania wzorców projektowych?
Dla kogo przeznaczona jest ta książka? 22
Wiemy także, co sobie myśli Twój mózg 23
Metapoznanie 25
Zmuś swój mózg do posłuszeństwa 27
Zespół recenzentów technicznych 30
Podziękowania 31
6
3. Wprowadzenie do wzorców projektowych
1
Witamy w krainie wzorców projektowych
Ktoś rozwiązał już Twoje problemy. W tym rozdziale dowiesz się, dlaczego (i w jaki
sposób) możesz wykorzystać wiedzę i doświadczenia zdobyte przez innych projektantów i programistów,
którzy podczas pracy nad różnymi projektami zmuszeni byli wstąpić na pełną zdradliwych pułapek ścieżkę
i — co najważniejsze — udało im się przeżyć taką wyprawę. Zanim dobrniemy do końca rozdziału, rzucimy
okiem na sposoby wykorzystywania wzorców projektowych i przedstawimy ich zalety, poznamy kilka
podstawowych zasad projektowania zorientowanego obiektowo, a także omówimy sposób działania
przykładowego wzorca. Najlepszą metodą zastosowania wzorca jest załadowanie go bezpośrednio
do Twojego mózgu, a następnie zlokalizowanie obszarów w obrębie projektowanych rozwiązań oraz
istniejących aplikacji, w których możesz je zastosować. Pracując z wzorcami projektowymi, zamiast
wielokrotnego wykorzystywania tych samych fragmentów kodu, wielokrotnie wykorzystujesz swoje
doświadczenia.
Prosta aplikacji o nazwie SymulatorKaczki 34
Pamiętaj, Jacek rozmyśla o dziedziczeniu… 37
opanowanie takich A może by tak interfejs? 38
zagadnień, jak
abstrakcyjność, dziedziczenie Jedyny pewny element w procesie tworzenia oprogramowania 40
i polimorfizm, nie zrobi jeszcze
z Ciebie dobrego projektanta Oddzielanie tego, co się zmienia, od tego, co pozostaje niezmienione 42
systemów zorientowanych Projektowanie zachowania Kaczki 43
obiektowo. Prawdziwy guru zawsze
myśli o stworzeniu elastycznego Testowanie kodu klasy Kaczka 50
projektu, który będzie łatwy
do serwisowania i będzie Dynamiczne ustawianie zachowania 52
sobie w stanie poradzić ze Wielki diagram „ukrytych” zachowań 54
zmieniającymi się
warunkami. Relacja MA może być lepsza niż JEST 55
Rozmawiając o wzorcach projektowania 56
Potęga wspólnego słownika wzorców 60
W jaki sposób mogę wykorzystywać wzorce projektowe? 61
Twoja skrzynka narzędziowa 64
Rozwiązania ćwiczeń 66
ÓZG
avior
fly beh
ulated
Twój M
Encaps ace>>
<<interf
avior
FlyBeh
fly()
ay
FlyNoW
Wings
FlyWith fly() {
- can’t fly!
fly() { // do nothing
nts duck }
// impleme
Duck flying
vior;
vior flyBeha r
Client behavio
FlyBeha ehav-
quackB
quack
ehavior
ulated
QuackB
swim() Encaps ace>>
Grupa wzorców projektowych
) <<interf ior
display(
Quack() QuackBehav
perform
Fly() quack()
perform )
ehavior(
setFlyB ior()
kBehav
setQuac e meth-
duck-lik
// OTHER MuteQuack
Squeak {
quack()
- can’t
Quack { // do nothing
quack()
Duck duckie quack!
Decoy quack)
{ // rubber
nts duck
Duck ){ // impleme squeak
Rubber display( g
Duck like a decoy quackin
Object
Redhead { // looks
OBSERWATOR
display() ck }
Duck a rubberdu
Mallard display()
{ // looks like
}
that holds
a redhead
display()
{ // looks like
}
a mallard
// looks like
state
8 8
8 Dog Objec
t
Su int 8
bje t
ct Objec
8
Objects ent
t
Duck Objec Cat Object
MVC
Depend
Mo ct
use Obje
az już całkiem
Observers
Automatic update/notification oller
Twój Kod, ter
Contr
l
Mode
cony poprzez
est
nowy i wzboga
Requ
wzorców
zastosowanie
View
projektowych.
7
4. Wzorzec Obserwator
2
Jak sprawić, by Twoje obiekty były
zawsze dobrze poinformowane
Nie przegap okazji, kiedy dzieje się coś naprawdę ciekawego!
Przedstawimy Ci wzorzec, który potrafi poinformować inne obiekty o tym, że wydarzyło się coś, czym
powinny się zająć. Co ciekawe, obiekty mogą nawet samodzielnie decydować w czasie działania programu
o tym, czy chcą być informowane o takich wydarzeniach. Wzorzec Obserwator jest jednym z najczęściej
wykorzystywanych wzorców w pakiecie JDK (ang. Java Development Kit) a co najważniejsze, jest wręcz
niewiarygodnie użyteczny. W niniejszym rozdziale rzucimy również okiem na relacje typu jeden-do-wielu
oraz tzw. luźne związki (tak, to prawda, napisaliśmy „luźne związki”). Korzystając z wzorca Obserwator,
z pewnością odmienisz swoje życie.
Aplikacja sprawdzająca warunki pogodowe 69
Pod st a w y ow eg o Spotkanie z wzorcem Obserwator 74
a ni a ob ie kt
p ro g ra m ow akcyjność Wydawca + Prenumerator = wzorzec Obserwator 75
Abstr
ja
Hermetyzac Pięciominutowe przedstawienie — obserwowany kontra obserwujący 78
Polimorfiz m Definicja wzorca Obserwator 81
ie
Dziedziczen Siła luźnych zależności 83
g ra m ow a ni a
R eg uł y p ro Projektowanie stacji meteorologicznej 86
ob ie kt ow eg o Implementacja stacji meteorologicznej 87
o
obiektoweg
ramowania
Reguły prog się zmienia. Java — zastosowanie wbudowanego wzorca Obserwator 94
ji to, co
hermetyzac
Poddawaj dziczenie. Ciemna strona klasy java.util.Observable 101
cję nad dzie
aj kompozy
Przedkład interfejsów
, Twoja skrzynka narzędziowa 104
tworzeniu
Skonc entruj się na Rozwiązania ćwiczeń 107
entacji.
a nie implem h
ty, w któryc to
orzyć projek i, o ile
Staraj się tw bą luźno powiązane
obiekty są
ze so zajemnie.
na siebie w
oddziałują
m ożliwe, nie
RELACJA JEDEN-DO-WIELU
Obiekt, którego stan
jest obserwowany
8 8
8 Obie
kt Pies
Ob 8
an y
int
iekt w
obserwo
Ob iek ty za leż ne
8
Obie a
kt Kaczk Obie
kt Kot
Obie
kt Mysz
Automatyczna aktualizacja
Obiekty obserwujące
(powiadamianie) (Observers)
8
5. Wzorzec Dekorator
3
Dekorowanie zachowania obiektów
W zasadzie niniejszy rozdział możemy równie dobrze zatytułować
„Otwieranie oczu programistom z nadmiernymi skłonnościami
do nadużywania dziedziczenia”. W tym rozdziale spróbujemy krytycznie przyjrzeć się
zwyczajowym skłonnościom do nadużywania mechanizmu dziedziczenia oraz nauczymy Cię sposobów
dekorowania zachowania klas w czasie działania programu przy użyciu pewnej formy kompozycji
obiektów. Dlaczego? Po zapoznaniu się z technikami dekoracji zachowania klas będziesz mógł wyposażać
swoje (i nie tylko) obiekty w nowe możliwości bez konieczności dokonywania jakichkolwiek modyfikacji
w kodzie klas podstawowych.
Witamy w „Star Caf�” 110
Reguła otwarte-zamknięte 116
Spotkanie z wzorcem Decorator 118
Konstruowanie zamówienia przy użyciu Dekoratorów 119
Definicja wzorca Decorator 121
Dekorujemy nasze Napoje 122
Tworzymy kod aplikacji „Star Caf�” 125
Dekoratory w świecie rzeczywistym:
obsługa wejścia-wyjścia w języku Java 130
Zawsze sądziłem, Tworzenie własnych dekoratorów obsługi wejścia-wyjścia 132
że prawdziwi mężczyźni tworzą Twoja skrzynka narzędziowa 135
podklasy dla wszystkiego, co się tylko
do tego nadaje. Tak było — do czasu, Rozwiązania ćwiczeń 136
gdy dowiedziałem się o korzyściach,
jakie daje możliwość rozszerzania
możliwości aplikacji na poziomie
działania, a nie kompilacji. A teraz
— spójrzcie tylko na mnie!
9
6. Wzorzec Fabryka
4
Pizzeria zorientowana obiektowo
Przygotuj się do stworzenia kilku projektów, w których zastosujemy
luźne powiązania pomiędzy poszczególnymi obiektami. Stworzenie
nowego obiektu to dużo więcej niż tylko proste zastosowanie operatora new. Niebawem przekonasz się,
że proces ten jest operacją, która nie zawsze powinna być publicznie dostępna, a co więcej, jest operacją,
która często może prowadzić do poważnych problemów z powiązaniami międzyobiektowymi. A tego byś
nie chciał, prawda? Przekonaj się, w jaki sposób wzorzec Factory może uratować Cię z takiej opresji.
Kiedy widzisz „nowy” obiekt, myśl o nim jako o „konkretnym” 140
Klientami fabryki abstrakcyjnej są
dwa obiekty naszej klasy Pizzeria,
WłoskaPizzeria i Amerykańska
Pizzeria.
Pizza w Obiektowie 142
WłoskaPizzeria Hermetyzacja procesu tworzenia obiektów 144
utwórzPizza()
Budujemy prostą fabrykę pizzy 145
Klasa abstrakcyjna FabrykaSkładnikówPizzy jest
interfejsem, który określa, w jaki sposób powinna
być tworzona rodzina spokrewnionych produktów Tworzymy definicję „wzorca” Simple Factory 147
— wszystkie składniki, które są niezbędne do <<interfejs>>
Ciasto
zrobienia pizzy.
Nowa struktura Pizzerii 150
GrubeChrupkieCiasto CienkieChrupkieCiasto
<<interfejs>>
FabrykaSkładnikówPizzy
utwórzCiasto()
Zezwalamy klasom podrzędnym na podejmowanie decyzji 151
utwórzSos() <<interfejs>>
Tworzymy Pizzerię 153
utwórzSer()
Sos
utwórzWarzywa()
utwórzPepperoni()
utwórzMałże()
Deklarowanie metody typu Factory (fabryka) 155
SosPomidorowy SosMarinara
Spotkanie z wzorcem Metoda Fabrykująca 161
WłoskaFabrykaSkładnikówPizzy AmerykańskaFabryka
SkładnikówPizzy <<interfejs>>
Ser
utwórzCiasto()
utwórzSos() utwórzCiasto()
utwórzSer() utwórzSos()
Równoległa hierarchia klas 162
utwórzWarzywa() utwórzSer()
utwórzPepperoni() utwórzWarzywa() SerMozzarella SerReggiano
utwórzMałże() utwórzPepperoni()
utwórzMałże()
<<interfejs>>
Małże
Definicja wzorca Metoda Fabrykująca 164
Zadaniem fabryk rzeczywistych
jest wytwarzanie odpowiednich
MrożoneMałże ŚwieżeMałże Pizzeria mocno uzależniona 167
składników pizzy. Każda
fabryka wie, w jaki sposób
należy utworzyć składniki
Sprawdzamy zależności pomiędzy obiektami 168
odpowiednie dla danego regionu.
Każda fabryka wytwarza różne
implementacje tej samej rodziny produktów.
Zastosowanie reguły DIP 170
A w międzyczasie, na zapleczu Pizzerii… 174
Rodziny składników… 175
Budujemy fabryki składników pizzy 176
Fabryka Abstrakcyjna 183
Za kulisami 184
Definicja wzorca Fabryka Abstrakcyjna 186
Porównanie Metody Fabrykującej oraz Fabryki Abstrakcyjnej 190
Twoja skrzynka narzędziowa 192
Rozwiązania ćwiczeń 193
10
7. Wzorzec Singleton
5
Obiekty jedyne w swoim rodzaju
Kolejnym przystankiem w naszej podróży jest wzorzec Singleton,
czyli nasza przepustka do kreowania jedynych w swoim rodzaju
obiektów, posiadających tylko jedną instancję. Być może ucieszysz się na wieść
o tym, że Singleton jest najprostszym z istniejących wzorców projektowych (przynajmniej pod względem
kategorii stopnia złożoności jego diagramu klas); jak by na to nie patrzeć, jego diagram składa się tylko
z jednej klasy! Ale nie wpadaj w euforię; niezależnie od prostoty diagramu klas tego wzorca na drodze
prowadzącej do jego implementacji napotkamy całkiem sporo wybojów i dziur. Lepiej zapnij mocno pasy
— to nie będzie takie proste jakby mogło się wydawać.
Jeden i tylko jeden 198
Mały Singleton 199
Analiza klasycznej implementacji wzorca Singleton 201
Wyznania obiektu Singleton 202
Fabryka czekolady 203
Definicja wzorca Singleton 205
Uuups, mamy problem… 206
Zostań wirtualną maszyną Java 207
Jak sobie radzić z wielowątkowością? 208
Wzorzec Singleton — pytania i odpowiedzi 212
Hershey, PA Twoja skrzynka narzędziowa 214
Rozwiązania ćwiczeń 216
obiektowego
ramowania
Wzorce prog , dokonuje relację
i jeden-
dzów iektam nne. ielanie
in algorytm y ob a
je defin y mię się ybe wymieie zy zmieni
finiu— rodz iuje po ają ydynamicznobprkt dz
onrany e
gy er de or oduje,zw st na
StrateObs— watji i powsposóbżealkied wację dae zostajorattym dado
a rf ją
negoek o oryejs
yzacw ator
taki — po , żemodyfikazależnań.arczaąinte zależnych alający
ow st
do D
ich hermet Dlu tegy poiektowbstrwyckty ch algorytmuiujehzetee, ejs pozw dnym
do-wieekor al jena akcyjn — owdziedzic in ni rf
no ie h za
tkie a igo ob ane. yc lu
b
u brzwa A ktua dajew
st ne wszys od doatycznie zauj ką liz zeokreą
ja sp nion
ec Stra ,mFaob yk kl nta, kt royj,tego okre definrzonśla klas h klbędzzę
ic as tylko
Wzorzswój daanależnieiść poaiecałych ór dzinąca — ościpozwalaniaklom podr ie miała
bną do te
m oda Fabryk znecznale
tw auto
czno zeni
elez ioneor Met za ówneznac niie , ów zs
ro dana ut a or ny.
as alny
po u ni asty
algorytmwiadom jeebie obiektmianibeobkoktzapewnia, że staniektuwzazo wnia globza
z
w orze leton ie — ie i pe
ąc sidnak tw Sing jakiej klasyąobiekt zoę ob odpowiedzialność
od na
używa. oferuj w ty
stancj
chwać,ącznie jedn ind przekazuje
.
rzal zyść.iscydo w
funkcjonecno de i ecył ctory Metho j instanzęi. ych. cj
do te
Wzorzpunkt dostępu do klas podr dn
Fa
ob iektów
tworzenie
11
8. Wzorzec Polecenie
6
Hermetyzacja wywołań
W niniejszym rozdziale przeniesiemy hermetyzację na
zupełnie nowy poziom: mamy zamiar dokonać hermetyzacji
wywołań metod. Zgadza się, dzięki hermetyzacji wywołań metod możemy
wykrystalizować pewne fragmenty obliczeń tak, że obiekt wywołujący obliczenia nie musi
się martwić, w jaki sposób je wykonać; po prostu wykorzystuje naszą metodę. Z takimi
hermetyzowanymi wywołaniami metod możemy również dokonywać wielu zadziwiająco
sprytnych operacji, takich jak na przykład zapisywanie ich do dzienników czy też ponowne
wykorzystywanie w celu zaimplementowania mechanizmu Cofnij (ang. Undo) w naszej aplikacji.
Poproszę
Automatyka w domu i zagrodzie 218
z ę z serem
łada się zapiekank słodowy.
enie sk
Mamy nową zabawkę! Sprawdzamy, jak działa SuperPilot… 219
w
Zamówi wybranych enia. i napój
pozycji iecie zamówi
oraz z nk
wienia e na bla
u zamó ły zapisan
blankiet óre zosta
menu,
kt
utwórz
Zamówi
enie()
Co zawiera otrzymany dysk CD-R 220
Zap
ieka
nkaz
se rem
odow
y
A w międzyczasie w naszym barze szybkiej obsługi… 223
ój sł
Nap
Przyjrzyjmy się nieco dokładniej wzajemnym interakcjom… 224
Klient wie
już, czego Zadania i zakresy odpowiedzialności 225
chce,
Od Baru do wzorca Polecenie 227
ie.
zamówien
i składa
pobierzZamó
wienie()
się
Nasze pierwsze POLECENIE 229
klienta i kiedy już
Zamówienie od Metoda ta
Kelnerka przyjmuje metodę realizujZamówienie().
z tym upora, wywo
rozpoczyna proce
łuje
s realizacji Zamó
wienia złożonego
przez klienta.
Definicja wzorca Polecenie 232
Wzorzec Command i SuperPilot 234
cje
Kucharz realizuje instruk
podane w Zamówieniu
przygotowuje odpowi
i
edni Implementujemy SuperPilota 236
)
ie(
ien
posiłek.
ów
Sprawdzamy możliwości naszego SuperPilota 238
m
jZa
zu
ali
re
dują
r
Burge lt
znaj
Ma
ieniu kcje
amów stru y
Na Z szelkie in tego, ab y
się w dne do właściw eruje apiekankę
(), Nadszedł wreszcie czas, aby utworzyć trochę dokumentacji… 241
kt
ezbę tować ienie ki ując przygotujZ apój()
du
ni
pro
go ów ug przygotujN
przy k. Zam rza, posł k
łe
posi ą Kucha takimi, ).
i
prac etodam iekankę(
ja
Implementacja mechanizmu wycofywania przy użyciu stanów 246
y
się m gotujZap
cow
zy
koń
pr
Każdy pilot powinien posiadać tryb Impreza! 250
Zastosowanie makropoleceń 251
Kolejne zastosowania wzorca Polecenie — kolejkowanie żądań 254
Kolejne zastosowania wzorca Polecenie — żądania rejestracji 255
Twoja skrzynka narzędziowa 256
Rozwiązania ćwiczeń 258
12
9. Wzorce Adapter oraz Fasada
7
Zdolność do adaptacji
W niniejszym rozdziale mamy zamiar dokonać paru niesamowitych
wyczynów z dziedziny rzeczy niemożliwych, takich jak na przykład
włożenie kwadratowego kołka do okrągłego otworu. Brzmi nierealnie? Nie
wtedy, kiedy mamy pod ręką odpowiednie wzorce projektowe. Pamiętasz wzorzec Dekorator? Podczas
pracy z nim owijaliśmy obiekty innymi obiektami tak, aby nadać im nowe zachowania. Teraz mamy zamiar
postępować tak samo, ale w nieco innym celu: chcemy sprawić, by ich interfejsy wyglądały jak coś, czym
nie są. Dlaczego jednak mielibyśmy to robić? Na przykład po to, aby zaadaptować projekt oczekujący
danego interfejsu do klasy, która implementuje zupełnie inny interfejs. To jeszcze nie wszystko; skoro
już jesteśmy przy tym temacie, przyjrzymy się również innemu wzorcowi, który owija obiekty w celu
uproszczenia ich interfejsów.
Europejski standard ściennego
gniazda elektrycznego
Adaptery są wśród nas 260
Adaptery zorientowane obiektowo 261
Wzorzec Adapter bez tajemnic 265
Definicja wzorca Adapter 267
Adapter
Adaptery obiektów i klas 268
Temat dzisiejszej wieczornej pogawędki: Adapter obiektów i Adapter klas 271
Adaptery w świecie rzeczywistym 272
Adaptujemy interfejs Enumeration do wymagań interfejsu Iterator 273
Standardowa wtyczka zasilająca Temat dzisiejszej wieczornej pogawędki: wzorce Dekorator i Adapter 276
Nie ma to jak kino domowe 279
Światła, kamera, fasada! 282
Konstruujemy fasadę naszego systemu kina domowego 285
Definicja wzorca Fasada 288
Reguła ograniczania interakcji 289
Twoja skrzynka narzędziowa 294
Rozwiązania ćwiczeń 296
Obiekt
adaptowany
e()
ac zon
T łum
Klient żądanie anie
() żąd
Klient jest zaprojektowany
niezgodnie z wymogami
interfejsu docelowego. Adapter interfejs
obiektu
adaptowa
nego
obiektu
Indyk to interfejs
y
low adaptowanego.
doce
rfejs Adapter implementuje interfejs
inte
docelowy i przechowuje fejs
anego. ntuje inter
instancję obiektu adaptow impleme
dapter
IndykA Kaczka.
y
docelow
13
10. Wzorzec Metoda Szablonowa
8
Hermetyzacja algorytmów
Jesteśmy jak w transie: hermetyzowaliśmy już proces tworzenia
obiektów, wywołania metod, złożone interfejsy, kaczki, indyki,
pizze… ciekawe, co będzie następne? Otóż, teraz mamy zamiar zająć się
hermetyzacją fragmentów algorytmów, tak aby klasy podrzędne mogły „podczepiać się” w różnych
miejscach wykonywanych obliczeń. Co więcej, zajmiemy się również regułą projektowania, której korzenie
wywodzą się w prostej linii z … Hollywood.
Tworzymy klasy reprezentujące kawę i herbatę (w języku Java) 299
Kawa i herbata, czyli klasy abstrakcyjne 302
Ciągniemy nasz projekt o krok dalej… 303
Wydobywanie metody recepturaParzenia() 304
Czego już dokonaliśmy? 307
Zauważyliśmy, że dwie
receptury są bardzo do siebie
podobne, chociaż niektóre
Spotkanie z wzorcem Metoda Szablonowa 308
ich etapy wymagają różnych
implementacji. Dzięki temu
spostrzeżeniu mogliśmy Zróbmy sobie herbatę… 309
Herbata
uogólnić recepturę i umieścić ją
Kawa
y.
w klasie bazowej.
1 Zagrzej
Co nam daje zastosowanie metody szablonowej? 310
ednią ilość wod odpowied
Zagrzej odpowi nią ilość
wody.
Definicja wzorca Metoda Szablonowa 311
1 2 Zalej wrzą
y do wrzątku. tkiem od
2 Włó ż torebkę herbat 3 Nalej kawy
mierzoną
porcję ka
i. do filiżank wy.
baty do filiżank
3 Nalej her
Napoje
4
Dodaj cu
kier i ml
i.
eko do sm
Bliskie spotkania z kodem aplikacji 312
4 Dodaj cytryn
ę do smaku. aku.
zawierające Haczyk na wzorzec Metoda Szablonowa… 314
kofeinę
uogólnienie 1 Zagrzej odpowiednią ilość wody. uogólnienie
Zastosowanie haczyka 315
2 Zaparz napój.
Testujemy naszą aplikację 316
niektóre etapy 3 Nalej uzyskany napój do filiżanki. niektóre etapy
delegowane są do
klasy podrzędneja 4 Domieszaj do napoju odpowiednie
delegowane są do
klasy podrzędneja Reguła Hollywood 318
rbata dodatki. Podklas
dklasa He a Kawa
Reguła Hollywood a wzorzec Metoda Szablonowa 319
Po
Wzorzec Metoda Szablonowa w głębokiej kniei… 321
2 Włóż torebkę herbaty do
wrzątku.
Klasa NapójZKo
feiną doskonale zna
2 Zaparz odmier
zoną porcję Sortowanie przy użyciu wzorca Metoda Szablonowa 322
4 Dodaj cytrynę. y receptury, choć
poszczególne etap
etap pierwszy kawy.
sama wykonuje tylko
i trzeci, zostawiają
c realizację
4 Dodaj cuk ier i mleko. A teraz musimy posortować trochę kaczek… 323
i czwartego
etapów drugiego
Porównywanie kaczek z innymi kaczkami 324
ata.
klasom Kawa i Herb
Robimy maszynę do sortowania kaczek 326
Zabawy z ramkami 328
Aplety Java 329
Temat dzisiejszej wieczornej pogawędki:
wzorce Metoda Szablonowa oraz Strategia 330
Twoja skrzynka narzędziowa 332
Rozwiązania ćwiczeń 333
14