وبلاگ بلیان

Design Patterns mit Java : Eine Einführung

معرفی کتاب «Design Patterns mit Java : Eine Einführung» نوشتهٔ Olaf Musch(auth.)، منتشرشده توسط نشر Springer Fachmedien Wiesbaden GmbH Springer Vieweg در سال 2022. این کتاب در 3 صفحه، فرمت pdf، زبان آلمانی ارائه شده است. «Design Patterns mit Java : Eine Einführung» در دستهٔ بدون دسته‌بندی قرار دارد.

Eine praxisnahe Beschreibung der Software Design Patterns, wie sie im 1994 erschienen Buch „Design Patterns – Elements of Reusable Object-Oriented Software“ der Autorengruppe Gamma, Helm, Johnson und Vlissides (auch genannt „Gang of Four“, kurz GoF, also „Viererbande“) Erwähnung finden. Alle Muster werden anhand von Beispielen detailliert erläutert und auch kritisch gewürdigt. Darüber hinaus werden Entwurfsprinzipien der objektorientierten Programmierung beschrieben und berücksichtigt. Alle Beispiele sind ausführlich im Quellcode kommentiert und unter Java 16 lauffähig. Teilweise werden auch neuere Features von Java bis einschließlich Version 16 erläutert und verwendet. Das Buch enthält genehmigte Inhalte aus der 1. Auflage von "Florian Siebler-Guth, Design Patterns mit Java". Herzlich willkommen! Inhaltsverzeichnis 1: Der Begriff „Entwurfsmuster“ 1.1 Was sind Entwurfsmuster? 1.1.1 Geschichtlicher und gedanklicher Hintergrund 1.1.2 Vor- und Nachteile von Mustern 1.1.2.1 Muster transportieren und konservieren Wissen 1.1.2.2 Muster schaffen ein gemeinsames Vokabular 1.1.2.3 Muster helfen, eine Programmiersprache besser zu verstehen 1.1.2.4 Muster können zu unangemessenen Entwürfen verleiten 1.1.3 Ein Muster ist kein Code ist kein Muster Was also sind „Entwurfsmuster“? 1.1.4 Muster in der Praxis 1.2 Entwurfsmuster kategorisieren und beschreiben 1.2.1 Verschiedene Kategorien von Mustern 1.2.2 Ein Muster-Template definieren 1.3 Zusammenfassung 2: Objektorientierte Programmierung und Entwurfsprinzipien 2.1 Objektorientierte Programmierung 2.2 Gegen Schnittstellen programmieren 2.3 Single Responsibility Principle (SRP) 2.4 Inheritance may be evil 2.5 Open/Closed Principle (OCP) 2.6 Prinzip des rechten Augenmaßes 3: Singleton 3.1 Die Aufgabe des Singleton Patterns 3.2 Eine erste Version des Singletons 3.3 Den Zugriff synchronisieren 3.4 Double checked locking 3.5 Early instantiation – frühes Laden 3.6 Singleton – Das UML-Diagramm 3.7 Antipattern 3.7.1 Kritik am Singleton 3.7.2 Ist Singleton ein Antipattern? 3.8 Zusammenfassung Zweckbeschreibung 4: Template Method 4.1 Die Arbeitsweise von Template Method 4.1.1 Ein erster Ansatz 4.1.2 Der zweite Ansatz 4.1.3 Das Hollywood-Prinzip 4.1.4 Einführen von Hook-Methoden 4.2 Das Interface „ListModel“ 4.3 Template Method – Das UML-Diagramm 4.4 Zusammenfassung Zweckbeschreibung 5: Observer 5.1 Einleitung 5.2 Eine erste Realisierung 5.3 Den Ansatz erweitern 5.4 Observer in der Java Klassenbibliothek 5.5 Nebenläufiger Zugriff 5.5.1 Zugriffe synchronisieren 5.5.2 Die Datenbasis kopieren 5.5.3 Einsatz einer threadsicheren Liste 5.6 Observer als Listener 5.7 Listener in der GUI-Programmierung 5.8 Das Model-View-Controller Pattern 5.9 Observer – Das UML-Diagramm 5.10 Zusammenfassung Zweckbeschreibung 6: Chain of Responsibility 6.1 Ein Beispiel aus der realen Welt 6.2 Erstes Code-Beispiel: Lebensmitteleinkauf 6.2.1 Die benötigten Lebensmittel 6.2.2 Die Verkäufer 6.2.3 Der Client 6.2.3.1 Erweiterung des Projekts 6.2.3.2 Variationen des Patterns 6.2.3.2.1 Hierarchien gestalten und beliebigen Einstiegspunkt wählen 6.2.3.2.2 Glieder der Kette modifizieren die Anfrage 6.3 Ein Beispiel aus der Klassenbibliothek 6.4 Chain of Responsibility – Das UML-Diagramm 6.5 Zusammenfassung Zweckbeschreibung 7: Mediator 7.1 Abgrenzung zum Observer Pattern 7.2 Aufgabe des Mediator Patterns 7.3 Mediator in Aktion – ein Beispiel 7.3.1 Definition eines Consumers 7.3.2 Definition eines Producers 7.3.3 Interface des Mediators 7.3.4 Test des Mediator Patterns 7.4 Mediator in Aktion – das zweite Beispiel 7.4.1 Mediator in der GUI-Programmierung 7.4.2 Aufbau der GUI 7.5 Mediator – Das UML-Diagramm 7.6 Kritik an Mediator 7.7 Zusammenfassung Zweckbeschreibung 8: State 8.1 Exkurs: Das Enum Pattern 8.1.1 Einen Zustand durch Zahlenwerte darstellen 8.1.2 Einen Zustand durch Objekte darstellen 8.1.3 Umsetzung in der Java-Klassenbibliothek 8.2 Den Zustand eines Objekts ändern 8.2.1 Ein erster Ansatz 8.2.2 Ein zweiter Ansatz 8.3 Das Prinzip des State Pattern 8.3.1 Die Rolle aller Zustände definieren 8.3.2 Das Projekt aus der Sicht des Clients 8.3.3 Veränderungen des Projekts 8.3.3.1 State-Objekte zentral im Kontext verwalten 8.3.3.2 State-Objekte als Rückgabewerte von Methodenaufrufen 8.4 Das State Pattern in der Praxis 8.5 State – Das UML-Diagramm 8.6 Zusammenfassung Zweckbeschreibung 9: Command 9.1 Befehle in Klassen kapseln 9.1.1 Version 1 – Grundversion 9.1.2 Weitere Anbieter treten auf 9.1.3 Einen Befehl kapseln 9.2 Command in der Klassenbibliothek 9.2.1 Beispiel 1: Nebenläufigkeit 9.2.2 Beispiel 2: Event-Handling 9.3 Befehlsobjekte wiederverwenden 9.3.1 Das Interface „Action“ 9.3.2 Verwendung des Interface „Action“ 9.4 Undo und redo von Befehlen 9.4.1 Ein einfaches Beispiel 9.4.2 Ein umfangreicheres Beispiel 9.4.3 Besprechung des Quelltextes 9.4.3.1 Die beteiligten Klassen 9.4.3.2 Aufgabe der GUI 9.4.3.3 Arbeitsweise der Command-Klassen 9.4.3.4 Undo und redo 9.4.4 Undo und redo grundsätzlich betrachtet 9.5 Command – Das UML-Diagramm 9.6 Zusammenfassung Zweckbeschreibung 10: Strategy 10.1 Ein erster Ansatz 10.2 Strategy in Aktion – Sortieralgorithmen 10.2.1 Das gemeinsame Interface 10.2.2 Der Selection Sort 10.2.3 Der Merge Sort 10.2.4 Der Quick Sort 10.2.5 Der Kontext 10.2.6 Bewertung des Ansatzes und mögliche Variationen 10.3 Das Strategy Pattern in der Praxis 10.4 Strategy – Das UML-Diagramm 10.5 Abgrenzung zu anderen Mustern 10.6 Zusammenfassung Zweckbeschreibung 11: Iterator 11.1 Zwei Möglichkeiten, Daten zu speichern 11.1.1 Daten in einem Array speichern 11.1.2 Daten in einer Kette speichern 11.2 Die Aufgabe eines Iterators 11.3 Das Interface Iterator in Java 11.3.1 Der Iterator der Klasse MyArray 11.3.1.1 Test des Iterators 11.3.1.2 Nutzen und Varianten des Iterators 11.3.2 Der Iterator der Klasse MyList 11.3.2.1 Test des Iterators 11.3.2.2 Nutzen des Iterators 11.4 Das Interface Iterable 11.5 Iterator – Das UML-Diagramm 11.6 Zusammenfassung Zweckbeschreibung 12: Composite 12.1 Prinzip von Composite 12.2 Umsetzung 1: Sicherheit 12.3 Umsetzung 2: Transparenz 12.4 Betrachtung der beiden Ansätze 12.5 Einen Schritt weiter gehen 12.5.1 Einen Cache anlegen 12.5.2 Die Elternkomponenten referenzieren 12.5.3 Knoten verschieben 12.6 Composite – Das UML-Diagramm 12.7 Zusammenfassung Zweckbeschreibung 13: Flyweight 13.1 Aufgabe des Patterns 13.2 Die Realisierung 13.3 Ein komplexeres Projekt 13.3.1 Der erste Ansatz 13.3.2 Intrinsischer und extrinsischer Zustand 13.4 Flyweight in der Praxis 13.5 Flyweight – Das UML-Diagramm 13.6 Zusammenfassung Zweckbeschreibung 14: Interpreter 14.1 Die Aufgabe in diesem Kapitel 14.2 Der Scanner 14.2.1 Die definierten Symbole 14.2.2 Der Scanner wandelt Strings in Symbole um 14.3 Der Parser 14.3.1 Abstrakte Syntaxbäume 14.3.2 Expressions für den Parser 14.3.3 Strichrechnung parsen 14.3.4 Punktrechnung parsen 14.3.5 Klammern berücksichtigen 14.4 Interpreter – Das UML-Diagramm 14.5 Diskussion des Interpreter Patterns 14.6 Zusammenfassung Zweckbeschreibung 15: Abstrakte Fabrik (Abstract Factory) 15.1 Gärten anlegen 15.1.1 Der erste Versuch 15.1.2 Der zweite Versuch – Vererbung 15.1.3 Der dritte Ansatz – die abstrakte Fabrik 15.1.4 Vorteile der abstrakten Fabrik 15.1.5 Einen neuen Garten definieren 15.2 Diskussion des Patterns und Praxis 15.3 Gespenster jagen 15.3.1 Die erste Version 15.3.1.1 Der Spieler 15.3.1.2 Die vier Himmelsrichtungen 15.3.1.3 Das Haus bauen 15.3.1.4 Die Klasse „Haus“ zur Steuerung des Spiels 15.3.2 Die zweite Version des Projekts 15.3.3 Version 3 – Einführung einer weiteren Fabrik 15.3.3.1 Zaubersprüche 15.3.3.2 Die neue Fabrik für Türen mit Zauberspruch 15.3.3.3 Das neue Bauteil: Eine Tür mit Zauberspruch 15.3.4 Version 4 – das Geisterhaus 15.4 Abstract Factory – Das UML-Diagramm 15.5 Zusammenfassung Zweckbeschreibung 16: Factory Method 16.1 Ein erstes Beispiel 16.2 Variationen des Beispiels 16.3 Praktische Anwendung des Patterns 16.3.1 Rückgriff auf das Iterator Pattern 16.3.2 Bei der Abstract Factory 16.4 Ein größeres Beispiel – ein Framework 16.4.1 Und noch ein Kalender 16.4.2 Die Schnittstellen für Einträge und deren Editoren 16.4.3 Die Klasse „Kontakt“ als Beispiel für einen Eintrag 16.4.4 Die Klasse FactoryMethod als Client 16.5 Unterschied zur Abstract Factory 16.6 Factory Method – Das UML-Diagramm 16.7 Zusammenfassung Zweckbeschreibung 17: Prototype 17.1 Objekte klonen 17.1.1 Kritik an der Realisierung 17.1.1.1 Das Interface Cloneable 17.1.1.2 Das Problem gleicher Referenzen 17.1.1.3 Was passiert beim Klonen 17.1.2 In Vererbungshierarchien klonen 17.2 Ein größeres Projekt 17.2.1 Besprechung der ersten Version 17.2.2 Die zweite Version – deep copy 17.2.3 Eigene Prototype definieren 17.3 Prototype – Das UML-Diagramm 17.4 Zusammenfassung Zweckbeschreibung 18: Builder 18.1 Ein Objekt erzeugt andere Objekte 18.1.1 Telescoping Constructor Pattern 18.1.2 JavaBeans Pattern 18.1.3 Builder Pattern 18.2 Ein komplexerer Konstruktionsprozess 18.2.1 XML-Dateien in ein TreeModel konvertieren 18.2.2 XML-Dateien als HTML darstellen 18.3 Builder – Das UML-Diagramm 18.4 Zusammenfassung Zweckbeschreibung 19: Visitor 19.1 Ein einfaches Beispiel 19.1.1 Das Aggregat 19.1.2 Der Visitor 19.1.3 Der Client 19.1.4 Ein weiterer Visitor 19.1.5 Kritik am Projekt 19.2 Visitor – Das UML-Diagramm 19.3 Zusammenfassung Zweckbeschreibung 20: Memento 20.1 Aufgabe des Memento Patterns 20.1.1 Öffentliche Datenfelder 20.1.2 Das JavaBeans Pattern 20.1.3 Default-Sichtbarkeit 20.2 Eine mögliche Realisierung 20.3 Ein größeres Projekt 20.4 Memento – Das UML-Diagramm 20.5 Zusammenfassung Zweckbeschreibung 21: Fassade 21.1 Ein Beispiel außerhalb der IT 21.2 Die Fassade in einem Java-Beispiel 21.2.1 Einführung einer Fassade 21.2.2 Der Begriff „System“ genauer betrachtet 21.3 Die Fassade in der Klassenbibliothek 21.4 Das „Gesetz von Demeter“ 21.5 Fassade – Das UML-Diagramm 21.6 Zusammenfassung Zweckbeschreibung 22: Adapter 22.1 Ein einleitendes Beispiel 22.2 Ein klassenbasierter Entwurf 22.3 Ein objektbasierter Entwurf 22.4 Kritik am Adapter Pattern 22.5 Ein Etikettenschwindel 22.6 Adapter – Das UML-Diagramm 22.7 Zusammenfassung Zweckbeschreibung 23: Proxy 23.1 Virtual Proxy 23.2 Security Proxy 23.3 Smart Reference 23.3.1 Die Grundversion 23.3.2 Einführung eines Proxys 23.3.3 Einen zweiten Proxy einführen 23.3.4 Dynamic Proxy 23.3.4.1 Das Reflection API 23.3.4.2 Der InvocationHandler 23.3.4.3 Die Proxy-Klasse 23.4 Remote Proxy 23.4.1 Aufbau von RMI grundsätzlich 23.4.2 Der RMI-Server 23.4.2.1 Die Schnittstelle PiIF 23.4.2.2 Die Serverklasse PiImpl 23.4.2.3 Die Klasse ServerStart startet den Server 23.4.3 Der RMI-Client 23.4.4 Das Projekt zum Laufen bringen 23.5 Proxy – Das UML-Diagramm 23.6 Zusammenfassung Zweckbeschreibung 24: Decorator 24.1 Autos bauen 24.1.1 Ein Attribut für jede Sonderausstattung 24.1.2 Mit Vererbung erweitern 24.1.3 Dekorieren nach dem Matroschka-Prinzip 24.1.3.1 Definieren der Grundmodelle 24.1.3.2 Definieren der Sonderausstattungen 24.1.3.3 Der Client steckt die Komponenten zusammen 24.2 Praxisbeispiele 24.2.1 Die Klasse „JScrollPane“ 24.2.2 Streams in Java 24.2.2.1 Streams als Decorator 24.2.2.2 Streams als Non-Decorator 24.3 Decorator – Das UML-Diagramm 24.4 Zusammenfassung Zweckbeschreibung 25: Bridge 25.1 Zwei Definitionen 25.1.1 Was ist eine Abstraktion 25.1.2 Was ist eine Implementierung 25.1.3 Ein Problem beginnt zu reifen 25.2 Das Bridge Pattern im Einsatz 25.2.1 Erster Schritt 25.2.2 Zweiter Schritt 25.2.2.1 Die Abstraktion erweitern 25.2.2.2 Die Implementierung erweitern 25.3 Diskussion des Bridge Patterns 25.3.1 Die Bridge in freier Wildbahn 25.3.2 Abgrenzung zu anderen Patterns 25.4 Bridge – Das UML-Diagramm 25.5 Zusammenfassung Zweckbeschreibung 26: Muster kombinieren 26.1 Das Beispiel 26.2 Singleton: Protokollierung 26.3 Abstrakte Fabrik: Bau der Sensoren 26.4 Observer: Die Auslösung 26.5 Adapter: Benachrichtigungen verschicken 26.6 Command: Aktoren und Fernbedienung 26.7 Ein Sensor löst aus 26.8 Klassendiagramm 26.9 Der Client 26.10 Überlegungen 26.11 Zusammenfassung Schlussbemerkungen Stichwortverzeichnis
دانلود کتاب Design Patterns mit Java : Eine Einführung