Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
Java. Wzorce
projektowe
Autor: James William Cooper
Tumaczenie: Piotr Badarycz
ISBN: 83-7197-529-5
Tytu oryginau: Java Design Patterns
Format: B5, stron: okoo 400
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Jest to praktyczna ksika, ktra mwi o tym jak pisa programy w jzyku Java
z uyciem standardowych wzorcw projektowych. Ksika skada si z serii krtkich
rozdziaw, z ktrych kady opisuje jeden wzorzec i zawiera przynajmniej jeden
wizualny, kompletny i dziaajcy przykadowy program. Kady rozdzia zawiera rwnie
diagramy UML pokazujce zalenoci wystpujce pomidzy klasami programu.
Podczas lektury niniejszej ksiki czytelnik dowie si, e wzorce projektowe s
powszechnie stosowanym sposobem organizacji obiektw w programach. Dziki
wykorzystaniu wzorcw atwiej jest pisa programy i pniej je modyfikowa.
Zapoznanie si z wzorcami pozwoli zdoby sownictwo i zestaw poj, za pomoc
ktrych mona atwiej opisa konstrukcj swoich programw.
Przedmowa .....................................................................................9
Podzi
kowania ..............................................................................11
Cz I
Rozdzia 1.
Rozdzia 2.
Cz II
Rozdzia 3.
Wzorce konstrukcyjne..................................................25
Factory (fabryka) ..........................................................................27
Jak dziaa fabryka ..........................................................................................................27
Przykadowy kod ...........................................................................................................28
Teraz dwie klasy pochodne ...........................................................................................28
Tworzenie Simple Factory ............................................................................................29
Wzorzec Factory w obliczeniach matematycznych ......................................................30
Zagadnienia do przemylenia ........................................................................................31
Rozdzia 4.
Rozdzia 5.
Rozdzia 6.
Singleton ......................................................................................47
Tworzymy Singleton uywajc metody statycznej .......................................................47
Wyjtek..........................................................................................................................48
Zgaszanie wyjtku........................................................................................................48
Tworzenie instancji klasy ..............................................................................................49
Dostarczenie globalnego punktu dostpu dla wzorca Singleton ...................................49
Pakiet javax.comm jako przykad uycia wzorca Singleton .........................................50
Konsekwencje stosowania wzorca Singleton................................................................53
Zagadnienia do przemylenia ........................................................................................53
Rozdzia 7.
Rozdzia 8.
Prototype (prototyp)......................................................................63
Klonowanie obiektw w jzyku Java ............................................................................64
Uywanie prototypu ......................................................................................................64
Stosowanie wzorca Prototypu .......................................................................................66
Meneder prototypw....................................................................................................69
Klonowanie z wykorzystaniem serializacji ...................................................................69
Konsekwencje stosowania wzorca Prototypu ...............................................................70
Zagadnienia do przemylenia ........................................................................................71
Podsumowanie wzorcw konstrukcyjnych ...................................................................71
Cz III
Rozdzia 9.
Wzorce strukturalne.....................................................73
Adapter ........................................................................................75
Przenoszenie danych pomidzy listami.........................................................................75
Korzystanie z klasy JList z biblioteki JFC ....................................................................76
Adaptery uniwersalne....................................................................................................81
Adaptery dynamiczne....................................................................................................81
Adaptery w jzyku Java.................................................................................................82
Zagadnienia do przemylenia ........................................................................................83
Rozdzia 10.
Rozdzia 11.
Spis treci
5
Klasa Employee.............................................................................................................93
Klasa Boss .....................................................................................................................94
Tworzenie drzewa pracownikw...................................................................................96
Awans ............................................................................................................................97
Lista dwukierunkowa ....................................................................................................97
Konsekwencje stosowania wzorca Composite..............................................................98
Prosty Composite...........................................................................................................98
Kompozyty w Javie .......................................................................................................99
Inne kwestie dotyczce implementacji..........................................................................99
Zagadnienia do przemylenia ........................................................................................99
Rozdzia 12.
Rozdzia 13.
Rozdzia 14.
Rozdzia 15.
Proxy (po7rednik)........................................................................125
Przykadowy kod .........................................................................................................126
Kopiowanie podczas zapisu ........................................................................................128
Enterprise Java Beans..................................................................................................128
Porwnanie z innymi wzorcami ..................................................................................128
Zagadnienia do przemylenia ......................................................................................128
Podsumowanie wzorcw strukturalnych.....................................................................128
Cz IV
Rozdzia 16.
Rozdzia 17.
Rozdzia 18.
Interpreter ..................................................................................157
Motywacja ...................................................................................................................157
Zastosowania ...............................................................................................................157
Prosty przykad raportowania......................................................................................158
Interpretowanie jzyka ................................................................................................159
Obiekty uywane podczas parsowania........................................................................160
Redukowanie parsowanego stosu................................................................................162
Implementowanie wzorca Interpretera ........................................................................163
Konsekwencje stosowania wzorca Interpretera...........................................................166
Zagadnienia do przemylenia ......................................................................................167
Rozdzia 19.
Iterator .......................................................................................169
Motywacja ...................................................................................................................169
Wyliczenia w Javie......................................................................................................170
Przykadowy kod .........................................................................................................170
Iteratory filtrowane......................................................................................................171
Konsekwencje stosowania wzorca Iteratora................................................................173
Iteratory i kompozyty ..................................................................................................174
Iteratory w Javie 1.2 ....................................................................................................174
Zagadnienia do przemylenia ......................................................................................174
Rozdzia 20.
Mediator.....................................................................................175
Przykadowy system....................................................................................................175
Interakcje pomidzy komponentami ...........................................................................176
Przykadowy kod .........................................................................................................177
Mediatorzy i obiekty polece ......................................................................................180
Konsekwencje stosowania wzorca Mediatora.............................................................180
Mediator z pojedynczym interfejsem ..........................................................................181
Kwestie implementacyjne ...........................................................................................181
Rozdzia 21.
Memento ....................................................................................183
Motywacja ...................................................................................................................183
Implementacja .............................................................................................................184
Przykadowy kod .........................................................................................................184
Konsekwencje stosowania wzorca Memento..............................................................188
Zagadnienia do przemylenia ......................................................................................188
Rozdzia 22.
Observer (obserwator).................................................................189
Obserwowanie zmian kolorw ....................................................................................190
Inne rodzaje komunikatw ..........................................................................................193
Klasa JList jako obserwator.........................................................................................193
Architektura model-widok-kontroler jako wzorzec Observer.....................................194
Interfejs Observer i klasa Observable..........................................................................195
Konsekwencje stosowania wzorca Observer...............................................................195
Zagadnienia do przemylenia ......................................................................................196
Spis treci
Rozdzia 23.
Rozdzia 24.
Rozdzia 25.
Template (szablon)......................................................................215
Motywacja ...................................................................................................................215
Rodzaje metod w klasach szablonowych ....................................................................216
Wzorce metod szablonowych w Javie.........................................................................217
Przykadowy kod .........................................................................................................217
Szablony i wywoania zwrotne....................................................................................221
Konsekwencje stosowania wzorca Template ..............................................................222
Zagadnienia do przemylenia ......................................................................................222
Rozdzia 26.
Cz V
Rozdzia 27.
Rozdzia 28.
Rozdzia 29.
Rozdzia 30.
Rozdzia 31.
Rozdzia 32.
Rozdzia 33.
Cz VI
Rozdzia 34.
Rozdzia 35.
Rozdzia 36.
Dodatki .......................................................................................283
Bibliografia .................................................................................285
Skorowidz ...................................................................................287
Rozdzia 13.
W niniejszym rozdziale bdziemy zajmowa si wzorcem Facade. Wzorzec ten jest uywany do obudowywania zbioru zoonych klas i dostarcza dla nich prostszego interfejsu.
Czsto program podczas tworzenia ewoluuje i ronie stopie jego komplikacji. Zachwycajc si korzyciami pyncymi ze stosowania wzorcw projektowych, zauwaamy
te ich ujemn cech: czasami generuj one bardzo wiele dodatkowych klas, przez co
trudniej jest zrozumie dziaanie programu. Poza tym programy czsto skadaj si
z szeregu podsystemw, z ktrych kady posiada swj wasny skomplikowany interfejs.
Fasada pozwala uproci t zoono dostarczajc uproszczonego interfejsu do tych
podsystemw. Takie uproszczenie moe czasami zmniejszy elastyczno przykrywanych klas, lecz czsto dostarcza wszystkich funkcji niezbdnych kademu uytkownikowi. Oczywicie przykrywane klasy i ich metody mog by w dalszym cigu dostpne.
Na szczcie, aby przedstawi przykad zastosowania wzorca Facade, nie bdziemy
musieli tworzy zoonego systemu. Java dostarcza zbioru klas, ktre pozwalaj na
czenie si z bazami danych poprzez interfejs zwany JDBC. Mona poczy si
z kad baz danych, dla ktrej producent dostarczy sterownik JDBC (odpowiedni
zestaw klas), czyli z prawie kad baz danych dostpn na rynku. Niektre bazy danych pozwalaj na poczenie bezporednie, do innych dostp jest zapewniony poprzez klas mostu JDBC-ODBC.
Klasy obsugujce bazy danych z pakietu java.sql stanowi doskonay przykad niskopoziomowych klas, ktre komunikuj si ze sob w bardzo zawiy sposb (rysunek 13.1).
Rysunek 13.1.
Zarys interakcji
pomidzy klasami
pakietu java.sql.*,
uywanych do pocze
z baz danych
T:\Andrzej\Java. Wzorce\12-93.doc
111
112
Nastpnie uywamy klasy do czenia si z baz danych. Pobieramy rwnie metadane, aby dowiedzie si wicej o bazie danych.
#$"
!
#
"$
!
"
Jeli chcemy sporzdzi list wszystkich nazw tabel bazy danych, musimy wywoa
metod
klasy
, ktra zwrci obiekt . Aby uzyska list
nazw musimy przej przez wszystkie elementy tego obiektu, i wyuska tylko tabele
uytkownika, odrzucajc tabele systemowe.
112
T:\Andrzej\Java. Wzorce\12-93.doc
113
Jak wida, ju teraz bardzo trudno jest tym wszystkim zarzdza, a nie wykonalimy
nawet jeszcze adnego zapytania.
Moemy przyj pewne zaoenie upraszczajce: wyjtki, ktre s zgaszane przez
metody klas nie wymagaj skomplikowanej obsugi. W przewaajcej czci metody
bd pracoway bezbdnie, dopki prawidowo bdzie dziaa poczenie sieciowe
z serwerem bazy danych. Wic moemy obudowa wszystkie te metody, tak by bdy, ktre wystpi byy wypisywane bez podejmowania adnych dodatkowych akcji.
Moliwe jest teraz napisanie prostych klas zawierajcych wszystkie wane metody
klas , , i . Tak bd wyglday metody klasy
:
$'
!'$' !
!'2 !,
!' 34+'
!' 34!
'
!' !%! ',
!
!'
%! !
!'* ! ! 5
Te proste klasy pozwalaj nam napisa program otwierajcy poczenie z baz danych i wywietlajcy nazwy jej tabel, kolumn i zawarto. Program umoliwia rwnie wykonanie prostego zapytania SQL.
Nasz przykadowy program wykorzystujcy fasad daje dostp do bazy danych zawierajcej ceny ywnoci w trzech okolicznych supermarketach.
T:\Andrzej\Java. Wzorce\12-93.doc
113
114
Rysunek 13.3.
Program dbFrame
pokazuje dostp
do nazw tabel, kolumn
i ich zawartoci
Kliknicie nazwy tabeli wywietli nazwy kolumn tej tabeli, a kliknicie nazwy kolumny wywietli zawarto tej kolumny. Nacinicie przycisku Run Query wywietli posortowane ceny pomaraczy we wszystkich supermarketach (rysunek 13.4).
Rysunek 13.4.
Wynik zapytania
wykonanego
przez program dbFrame
Kliknicie w obszarze listy powoduje wykonanie zapytania dla nazw kolumn lub zawartoci.
!' :
2'6'6#
!
'6##+'
&!
'6##!
&$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
&!
34#'
!
+'
:
0 ! ,
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
&$
#!
:
#'
!%!+'
:,
$
% '
$
/
$
% '!
114
T:\Andrzej\Java. Wzorce\12-93.doc
115
#'
%!!
:
&
<=
$
& #'
%!!
:
Zauwamy, e klasa
zawiera instancj klasy ,
i . Z kolei klasa zawiera instancje klas i .
T:\Andrzej\Java. Wzorce\12-93.doc
115
116
Sterownik ODBC Data Access jest dostpny na stronach firmy Microsoft. Po zainstalowaniu pojawi si folder ODBC w panelu sterowania.
Program z foldera Facade, ktry znajduje si na serwerze ftp wydawnictwa Helion
(ftp://ftp.helion.pl/przyklady/javawz.zip), naley przekopiowa na twardy dysk. Nastpnie naley uruchomi program ODBC z panelu sterowania i zarejestrowa plik
groceries.mdb, nacisn przycisk Add i wypeni panel jak pokazano to na rysunku
13.6. Aby ustawi lokalizacj pliku groceries.mdb naley nacisn Select i wskaza
na plik w katalogu, do ktrego zosta wkopiowany.
Rysunek 13.6.
Sposb skonfigurowania
dostpu ODBC/JDBC
do przykadowej
bazy danych
Jeli rdo danych zostanie nazwane inaczej ni Grocery Prices, trzeba bdzie
zmieni 20. lini w programie dbFrame.java.
Zagadnienia do przemylenia
1. Przypumy, e mamy napisany program z polem menu File/Open
116
T:\Andrzej\Java. Wzorce\12-93.doc