
Jest to praktyczna książka, która mówi o tym jak pisać programy w języku Java z użyciem standardowych wzorców projektowych. Książka składa się z serii krótkich rozdziałów, z których każdy opisuje jeden wzorzec i zawiera przynajmniej jeden wizualny, kompletny i działający przykładowy program. Każdy rozdział zawiera również diagramy UML pokazujące zależności występujące pomiędzy klasami programu.
Podczas lektury niniejszej książki czytelnik dowie się, że wzorce projektowe są powszechnie stosowanym sposobem organizacji obiektów w programach. Dzięki wykorzystaniu wzorców łatwiej jest pisać programy i później je modyfikować. Zapoznanie się z wzorcami pozwoli zdobyć słownictwo i zestaw pojęć, za pomocą których można łatwiej opisać konstrukcję swoich programów.
Przedmowa (9)Podziękowania (11)
Część I Czym są wzorce projektowe? (13)
Rozdział 1. Wprowadzenie (15)
- Definicja wzorca projektowego (17)
- Proces uczenia się (18)
- Studiowanie wzorców projektowych (19)
- Uwagi na temat projektowania zorientowanego obiektowo (19)
- Klasy JFC (20)
- Wzorce projektowe w języku Java (20)
- Dziedziczenie (22)
- Interfejsy (23)
- Kompozycja (23)
- Adnotacje (24)
- JVISION (24)
- Visual SlickEdit (24)
Rozdział 3. Factory (fabryka) (27)
- Jak działa fabryka (27)
- Przykładowy kod (28)
- Teraz dwie klasy pochodne (28)
- Tworzenie Simple Factory (29)
- Wzorzec Factory w obliczeniach matematycznych (30)
- Zagadnienia do przemyślenia (31)
- Klasa Swimmer (35)
- Klasa Event (35)
- Rozstawienie bezpośrednie (36)
- Program rozstawiający (38)
- Inne fabryki (38)
- Kiedy używać Factory Method (38)
- Zagadnienia do przemyślenia (39)
- Abstract Factory w projektowaniu ogrodów (42)
- Jak działa interfejs użytkownika (43)
- Dodawanie nowych klas (44)
- Konsekwencje stosowania wzorca Abstract Factory (45)
- Zagadnienia do przemyślenia (45)
- Tworzymy Singleton używając metody statycznej (47)
- Wyjątek (48)
- Zgłaszanie wyjątku (48)
- Tworzenie instancji klasy (49)
- Dostarczenie globalnego punktu dostępu dla wzorca Singleton (49)
- Pakiet javax.comm jako przykład użycia wzorca Singleton (50)
- Konsekwencje stosowania wzorca Singleton (53)
- Zagadnienia do przemyślenia (53)
- Program do śledzenia inwestycji (56)
- Nazywanie budowniczych (57)
- Budowniczy listy wyboru (59)
- Budowniczy pól wyboru (60)
- Konsekwencje stosowania wzorca Builder (61)
- Zagadnienia do przemyślenia (61)
- Klonowanie obiektów w języku Java (64)
- Używanie prototypu (64)
- Stosowanie wzorca Prototypu (66)
- Menedżer prototypów (69)
- Klonowanie z wykorzystaniem serializacji (69)
- Konsekwencje stosowania wzorca Prototypu (70)
- Zagadnienia do przemyślenia (71)
- Podsumowanie wzorców konstrukcyjnych (71)
Rozdział 9. Adapter (75)
- Przenoszenie danych pomiędzy listami (75)
- Korzystanie z klasy JList z biblioteki JFC (76)
- Adaptery uniwersalne (81)
- Adaptery dynamiczne (81)
- Adaptery w języku Java (82)
- Zagadnienia do przemyślenia (83)
- Diagram klas (87)
- Rozbudowa mostu (87)
- Java Bean jako przykład wzorca Bridge (89)
- Konsekwencje stosowania wzorca Bridge (89)
- Zagadnienia do przemyślenia (90)
- Implementacja kompozytu (92)
- Obliczanie wynagrodzeń (92)
- Klasa Employee (93)
- Klasa Boss (94)
- Tworzenie drzewa pracowników (96)
- Awans (97)
- Lista dwukierunkowa (97)
- Konsekwencje stosowania wzorca Composite (98)
- Prosty Composite (98)
- Kompozyty w Javie (99)
- Inne kwestie dotyczące implementacji (99)
- Zagadnienia do przemyślenia (99)
- Dekorowanie przycisku (101)
- Użycie dekoratora (103)
- Diagram klas (104)
- Dekorowanie obwódek w Javie (105)
- Dekoratory niewizualne (106)
- Dekoratory, adaptery i kompozyty (108)
- Konsekwencje stosowania wzorca Dekoratora (108)
- Zagadnienia do przemyślenia (109)
- Tworzenie klas fasady (112)
- Konsekwencje stosowania wzorca Facade (115)
- Uwagi dotyczące instalacji i uruchamiania programu dbFrame (115)
- Zagadnienia do przemyślenia (116)
- Omówienie (118)
- Przykładowy kod (118)
- Wzorce Flyweight w Javie (122)
- Współdzielone obiekty (122)
- Obiekty "kopiowane podczas zapisu" (123)
- Zagadnienia do przemyślenia (123)
- Przykładowy kod (126)
- Kopiowanie podczas zapisu (128)
- Enterprise Java Beans (128)
- Porównanie z innymi wzorcami (128)
- Zagadnienia do przemyślenia (128)
- Podsumowanie wzorców strukturalnych (128)
Rozdział 16. Chain of Responsibility (łańcuch odpowiedzialności) (133)
- Zastosowania (134)
- Przykładowy kod (134)
- Wizualne komponenty pola listy (137)
- Implementacja systemu pomocy (139)
- Łańcuch czy drzewo? (142)
- Rodzaje żądań (143)
- Przykłady w Javie (143)
- Konsekwencje stosowania wzorca Chain of Responsibility (143)
- Zagadnienia do przemyślenia (144)
- Motywacja (145)
- Obiekt polecenia (146)
- Używanie obiektów polecenia (147)
- Wzorzec Command (148)
- Wzorzec Command w języku Java (150)
- Konsekwencje stosowania wzorca Command (151)
- Wycofywanie operacji (152)
- Zagadnienia do przemyślenia (155)
- Motywacja (157)
- Zastosowania (157)
- Prosty przykład raportowania (158)
- Interpretowanie języka (159)
- Obiekty używane podczas parsowania (160)
- Redukowanie parsowanego stosu (162)
- Implementowanie wzorca Interpretera (163)
- Konsekwencje stosowania wzorca Interpretera (166)
- Zagadnienia do przemyślenia (167)
- Motywacja (169)
- Wyliczenia w Javie (170)
- Przykładowy kod (170)
- Iteratory filtrowane (171)
- Konsekwencje stosowania wzorca Iteratora (173)
- Iteratory i kompozyty (174)
- Iteratory w Javie 1.2 (174)
- Zagadnienia do przemyślenia (174)
- Przykładowy system (175)
- Interakcje pomiędzy komponentami (176)
- Przykładowy kod (177)
- Mediatorzy i obiekty poleceń (180)
- Konsekwencje stosowania wzorca Mediatora (180)
- Mediator z pojedynczym interfejsem (181)
- Kwestie implementacyjne (181)
- Motywacja (183)
- Implementacja (184)
- Przykładowy kod (184)
- Konsekwencje stosowania wzorca Memento (188)
- Zagadnienia do przemyślenia (188)
- Obserwowanie zmian kolorów (190)
- Inne rodzaje komunikatów (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 przemyślenia (196)
- Przykładowy kod (197)
- Przełączanie pomiędzy stanami (201)
- Interakcje mediatora z klasą StateManager (202)
- Przejścia pomiędzy stanami (204)
- Mediator - "klasa Bóg" (204)
- Konsekwencje stosowania wzorca State (204)
- Zagadnienia do przemyślenia (205)
- Motywacja (207)
- Przykładowy kod (208)
- Klasa Context (209)
- Polecenia programu (210)
- Strategia dla wykresu liniowego i wykresu słupkowego (210)
- Rysowanie wykresów w Javie (211)
- Konsekwencje stosowania wzorca Strategy (213)
- Zagadnienia do przemyślenia (214)
- Motywacja (215)
- Rodzaje metod w klasach szablonowych (216)
- Wzorce metod szablonowych w Javie (217)
- Przykładowy kod (217)
- Szablony i wywołania zwrotne (221)
- Konsekwencje stosowania wzorca Template (222)
- Zagadnienia do przemyślenia (222)
- Motywacja (223)
- Kiedy używać wzorca Visitor (224)
- Przykładowy kod (225)
- Wizytowanie klas (226)
- Wizytowanie wielu klas (227)
- Kierownicy są również pracownikami (228)
- Operacje wizytatora wyłapujące wszystkie klasy (229)
- Podwójne wywołania (230)
- Przemierzanie wielu klas (230)
- Konsekwencje stosowania wzorca Visitor (230)
- Zagadnienia do przemyślenia (231)
Rozdział 27. JFC czyli Swing (235)
- Instalacja i korzystanie z klas Swing (235)
- Koncepcje, na których oparta jest biblioteka Swing (236)
- Hierarchia klas Swing (236)
- Ustawianie definicji wyglądu i zachowania (237)
- Obsługa zdarzenia zamknięcia okna (238)
- Klasa JxFrame (238)
- Prosty program z dwoma przyciskami (239)
- Więcej o klasie JButton (240)
- Przyciski radiowe (241)
- Klasa JToolBar (242)
- JToggleButton (242)
- Przykładowy program z różnymi przyciskami (243)
- Obiekty akcji (245)
- Wzorce projektowe i obiekty akcji (248)
- Zaznaczanie elementów listy i zdarzenia (250)
- Dynamiczna zmiana wyświetlanej zawartości listy (250)
- Posortowana lista wykorzystująca komponent JList i obiekt ListModel (252)
- Sortowanie bardziej skomplikowanych obiektów (253)
- Otrzymywanie klucza bazy danych (255)
- Dodawanie ikon do komponentu JList (256)
- Prosty program z komponentem JTable (259)
- Interpretatory wyglądu komórek (262)
- Interpretacja innych klas (263)
- Zaznaczanie komórek tabeli (265)
- Wzorce użyte w powyższym przykładzie (266)
- Interfejs TreeModel (270)
- Podsumowanie (271)
Rozdział 34. Sandy i mediator (275)
Rozdział 35. Problemy Herba z przetwarzaniem tekstu (279)
Rozdział 36. Dylemat Mary (281)
Dodatki (283)
Bibliografia (285)
Skorowidz (287)
