Cover | 1 |
Titel | 11 |
Impressum | 12 |
Inhaltsverzeichnis | 15 |
Vorwort | 19 |
Geleitwort von Grady Booch | 23 |
Einleitung | 25 |
Kapitel 1: Einführung | 27 |
1.1 Was ist ein Design Pattern? | 29 |
1.2 Design Patterns im Smalltalk MVC | 32 |
1.3 Beschreibung der Design Patterns | 34 |
1.4 Der Design-Patterns-Katalog | 36 |
1.5 Aufbau des Katalogs | 40 |
1.6 Die Anwendung von Design Patterns zur Behebung von Designproblemen | 43 |
1.6.1 Passende Objekte finden | 43 |
1.6.2 Objektgranularität bestimmen | 44 |
1.6.3 Objektschnittstellen spezifizieren | 44 |
1.6.4 Objektimplementierungen spezifizieren | 46 |
1.6.5 Wiederverwendungsmechanismen einsetzen | 51 |
1.6.6 Strukturen der Laufzeit und beim Kompilieren abstimmen | 56 |
1.6.7 Designänderungen berücksichtigen | 58 |
1.7 Auswahl eines Design Patterns | 65 |
1.8 Anwendung eines Design Patterns | 67 |
Kapitel 2: Fallstudie: Erstellung eines Texteditors | 69 |
2.1 Designprobleme | 69 |
2.2 Dokumentstruktur | 71 |
2.2.1 Rekursive Komposition | 73 |
2.2.2 Glyphen | 74 |
2.2.3 Das Design Pattern Composite (Kompositum) | 77 |
2.3 Formatierung | 78 |
2.3.1 Kapselung des Formatierungsalgorithmus | 78 |
2.3.2 Die Unterklassen Compositor und Composition | 79 |
2.3.3 Das Design Pattern Strategy (Strategie) | 81 |
2.4 Ausgestaltung der Benutzeroberfläche | 82 |
2.4.1 Durchsichtige Umhüllung (Transparent Enclosure) | 82 |
2.4.2 Die Unterklasse MonoGlyph | 84 |
2.4.3 Das Design Pattern Decorator (Dekorierer) | 86 |
2.5 Unterstützung mehrerer Look-and-Feel-Standards | 87 |
2.5.1 Abstrahierung der Objekterzeugung | 87 |
2.5.2 Factories und Produktklassen | 88 |
2.5.3 Das Design Pattern Abstract Factory (Abstrakte Fabrik) | 91 |
2.6 Unterstützung mehrerer Fenstersysteme | 92 |
2.6.1 Eignung des Design Patterns Abstract Factory (Abstrakte Fabrik) | 92 |
2.6.2 Kapselung von Implementierungsabhängigkeiten | 93 |
2.6.3 Die Klassenhierarchien Window und WindowImp | 95 |
2.6.4 Das Design Pattern Bridge (Brücke) | 99 |
2.7 Userseitige Operationen | 100 |
2.7.1 Kapselung eines Requests | 101 |
2.7.2 Die Command-Klasse und ihre Unterklassen | 102 |
2.7.3 Die Funktion Undo (Rückgängig) | 103 |
2.7.4 Befehlshistorie | 104 |
2.7.5 Das Design Pattern Command (Befehl) | 106 |
2.8 Rechtschreibprüfung und Silbentrennung | 107 |
2.8.1 Zugriff auf verteilte Informationen | 107 |
2.8.2 Kapselung von Zugriff und Traversierung | 108 |
2.8.3 Die Iterator-Klasse und ihre Unterklassen | 110 |
2.8.4 Das Design Pattern Iterator (Iterator) | 113 |
2.8.5 Traversierung kontra Traversierungsaktionen | 113 |
2.8.6 Kapselung der Analyse | 114 |
2.8.7 Die Visitor-Klasse und ihre Unterklassen | 119 |
2.8.8 Das Design Pattern Visitor (Besucher) | 120 |
2.9 Zusammenfassung | 121 |
Kapitel 3: Erzeugungsmuster (Creational Patterns) | 125 |
3.1 Abstract Factory (Abstrakte Fabrik) | 130 |
3.2 Builder (Erbauer) | 141 |
3.3 Factory Method (Fabrikmethode) | 151 |
3.4 Prototype (Prototyp) | 163 |
3.5 Singleton (Singleton) | 174 |
3.6 Weitere Erläuterungen zu den Erzeugungsmustern | 183 |
Kapitel 4: Strukturmuster (Structural Patterns) | 187 |
4.1 Adapter (Adapter) | 189 |
4.2 Bridge (Brücke) | 202 |
4.3 Composite (Kompositum) | 214 |
4.4 Decorator (Dekorierer) | 228 |
4.5 Facade (Fassade) | 239 |
4.6 Flyweight (Fliegengewicht) | 249 |
4.7 Proxy (Proxy) | 264 |
4.8 Weitere Erläuterungen zu den Strukturmustern | 277 |
4.8.1 Adapter (Adapter, siehe Abschnitt 4.1) kontra Bridge (Brücke, siehe Abschnitt 4.2) | 277 |
4.8.2 Composite (Kompositum, siehe Abschnitt 4.3) kontra Decorator (Dekorierer, siehe Abschnitt 4.4) kontra Proxy (Proxy, siehe Abschnitt 4.7) | 278 |
Kapitel 5: Verhaltensmuster (Behavioral Patterns) | 281 |
5.1 Chain of Responsibility (Zuständigkeitskette) | 282 |
5.2 Command (Befehl) | 294 |
5.3 Interpreter (Interpreter) | 306 |
5.4 Iterator (Iterator) | 322 |
5.5 Mediator (Vermittler) | 340 |
5.6 Memento (Memento) | 351 |
5.7 Observer (Beobachter) | 362 |
5.8 State (Zustand) | 374 |
5.9 Strategy (Strategie) | 385 |
5.10 Template Method (Schablonenmethode) | 396 |
5.11 Visitor (Besucher) | 402 |
5.12 Weitere Erläuterungen zu den Verhaltensmustern | 419 |
5.12.1 Variieren der Kapselung | 419 |
5.12.2 Objekte als Argumente | 420 |
5.12.3 Kommunikation: Kapseln oder Verteilen? | 420 |
5.12.4 Absender und Empfänger entkoppeln | 421 |
5.12.5 Zusammenfassung | 424 |
Kapitel 6: Schlusswort der Autoren | 427 |
6.1 Was kann man von Design Patterns erwarten? | 427 |
6.1.1 Ein gemeinsames Designvokabular | 428 |
6.1.2 Eine Dokumentations- und Lernhilfe | 428 |
6.1.3 Eine Ergänzung zu existierenden Methoden | 429 |
6.1.4 Zielsetzungen für Refactorings | 430 |
6.2 Eine kleine Kataloggeschichte | 432 |
6.3 Die Pattern-Gemeinde | 433 |
6.3.1 Christopher Alexanders »Muster-Sprache« | 434 |
6.3.2 Patterns in Softwaresystemen | 435 |
6.4 Eine Einladung | 436 |
6.5 Ein abschließender Gedanke | 437 |
Anhang A: Glossar | 439 |
Anhang B: Notationshinweise | 445 |
B.1 Klassendiagramme | 446 |
B.2 Objektdiagramme | 449 |
B.3 Interaktionsdiagramme | 449 |
Anhang C: Fundamentale Klassen | 451 |
C.1 Die Klasse List | 451 |
C.2 Iterator | 454 |
C.3 ListIterator | 454 |
C.4 Point | 455 |
C.5 Rect | 456 |
Anhang D: Quellenverzeichnis | 457 |
Stichwortverzeichnis | 463 |