Skip to main content
main-content

Über dieses Buch

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.

Inhaltsverzeichnis

Frontmatter

1. Der Begriff „Entwurfsmuster“

Zusammenfassung
Gamma et al. beziehen sich in ihrem Buch auf den Architekten Christopher Alexander, der für den Bereich der Städteplanung und des Häuserbaus Muster beschrieben hat. Im ersten Kapitel werden seine Ideen vorgestellt und beschrieben, wie Muster auch in der Softwareentwicklung Fuß gefasst haben. Auch werden Vor- und Nachteile des Einsatzes von Entwurfsmustern erläutert. Schließlich geht es um Formalien wie die Kategorisierung von Mustern und das Template, nach dem Entwurfsmuster üblicherweise beschrieben werden.
Olaf Musch

2. Objektorientierte Programmierung und Entwurfsprinzipien

Zusammenfassung
In diesem Kapitel werden einige grundlegende Prinzipien der objektorientierten Softwareentwicklung erläutert, auf die sich das Buch in weiten Teilen stützt. Auch ihre Vor- und Nachteile sowie ihre Anwendung in Entwurfsmustern werden beschrieben. Im weiteren Verlauf des Buches wird es immer wieder Bezüge auf diese Prinzipien geben.
Olaf Musch

3. Singleton

Zusammenfassung
Das Singleton Pattern wird für die Erzeugung eines Objektes genutzt, das nur ein einziges Mal existieren darf. Dafür sind gewisse Konstruktionen erforderlich, die im eigentlichen Sinne sogar gegen Prinzipien der objektorientierten Programmierung verstoßen müssen. Dennoch ist das Singleton Pattern eines der einfacheren Entwurfsmuster.
Olaf Musch

4. Template Method

Zusammenfassung
Die „Template Method“ ist ein Verhaltensmuster und sehr leicht zu verstehen. Das Pattern hilft Ihnen, wenn Sie einen Algorithmus haben, der einerseits nicht geändert werden darf, andererseits aber in Unterklassen teilweise unterschiedlich implementiert werden muss. Die Template Method bietet für diesen Fall eine stabile Vorgehensweise.
Olaf Musch

5. Observer

Zusammenfassung
Wenn Sie den Zustand eines wichtigen Objektes überwachen wollen und mehrere andere Objekte über eine Änderung dieses Zustands informiert werden müssen, dann ist das Observer Pattern ein geeigneter Lösungsansatz. Die Anzahl und der Typ der Objekte, die auf eine Änderung achten, spielt dabei keine Rolle, sie müssen lediglich bei dem wichtigen Objekt registriert sein.
Olaf Musch

6. Chain of Responsibility

Zusammenfassung
Das Verhaltensmuster Chain of Responsibility wird auch Zuständigkeitskette genannt. Auch hier geht es darum, eine Nachricht an eine Vielzahl von Objekten zu senden. Erinnern Sie sich – beim Observer Pattern haben Sie eine Nachricht an alle Objekte geschickt, die als Listener registriert sind. Über die Zuständigkeitskette wird eine Nachricht in eine Kette von Objekten weitergereicht; das erste Objekt, das diese Nachricht verarbeiten kann, bekommt die Zuständigkeit.
Olaf Musch

7. Mediator

Zusammenfassung
Das Mediator Pattern ermöglicht das flexible Zusammenspiel mehrerer Objekte/Klassen, die sich untereinander ggf. nicht kennen. Die Vermittlungsfunktion kann sehr flexibel variiert werden, aber auch zu sehr umfangreichen Implementierungen führen. Im Gegensatz zum Observer oder zur Chain of Responsibility hat der Mediator nämlich auch eigene Aufgaben zu erledigen.
Olaf Musch

8. State

Zusammenfassung
Das State Pattern kapselt Zustandsausprägungen in Objekten. Das kann nützlich sein, wenn ein Objekt abhängig von seinem Zustand unterschiedliches Verhalten zeigt. Mit dem State Pattern wird jeder Zustand durch ein eigenes Objekt repräsentiert; in der Folge kann jeder nur das tun, was in dem aktuellen Zustand erlaubt sein soll. Die Übergänge zwischen den Zuständen können sehr genau gesteuert werden.
Olaf Musch

9. Command

Zusammenfassung
Das Command Pattern ermöglicht die Trennung von Befehlsaufruf und Befehlsausführung, die über ein Befehlsobjekt gekoppelt werden. Ähnlich wie bei der Chain of Responsibility werden diese beiden Teile entkoppelt, allerdings ist im Command Pattern immer eine konkrete ausführende Instanz zuständig. Das ermöglicht z. B. Logbücher und Undo-Operationen.
Olaf Musch

10. Strategy

Zusammenfassung
Das Strategy Pattern wird eingesetzt, wenn eine Aufgabe mit unterschiedlichen Vorgehensweisen gelöst werden kann und darüber zur Laufzeit entschieden werden soll. Es gehört zu den Verhaltensmustern. Das Ergänzen weiterer Lösungsstrategien ist jederzeit problemlos möglich.
Olaf Musch

11. Iterator

Zusammenfassung
Wenn Sie auf die Teile eines zusammengesetzten Objekts oder einer Sammlung vieler Objekte zugreifen können wollen, ohne die interne Repräsentation dieser Sammlung zu kennen, benötigen Sie etwas, das Ihnen diesen Zugriff auf alle Teile nacheinander ermöglicht: Einen Iterator. Glücklicherweise bietet Java bereits einige Iteratoren und die Möglichkeit, sehr flexibel eigene Iteratoren zu erstellen.
Olaf Musch

12. Composite

Zusammenfassung
Das Composite Pattern ist ein Strukturmuster und beschreibt, wie Objekte zusammengesetzt werden können, um sinnvolle Einheiten zu bilden. Verwendung findet es z. B. in Baumdarstellungen von Verzeichnissen oder ähnlichen Strukturen.
Olaf Musch

13. Flyweight

Zusammenfassung
Das Flyweight-Pattern ist eine Variante, kleine Objekte, die häufig wiederverwendet werden sollen, zu verwalten. Denken Sie an Date()-Objekte oder Namens-Objekte in Statistiken. Sie müssen dafür nicht jedes Mal ein neues Objekt erzeugen und damit Speicher verwenden.
Olaf Musch

14. Interpreter

Zusammenfassung
Für das „Verstehen“ von Sprache im Allgemeinen, aber auch Befehlen oder Rechenoperationen im Besonderen bedarf es einer entsprechend geeigneten Interpretation der Eingabe. Für die Konstruktion der Grammatik und die Interpretation der Eingabe bietet sich das Interpreter Pattern an.
Olaf Musch

15. Abstrakte Fabrik (Abstract Factory)

Zusammenfassung
Die abstrakte Fabrik ermöglicht das Delegieren der Objekterzeugung an eine Methode für die Erzeugung einheitlicher Produktfamilien, so dass in der eigentlichen Anwendung auf den new-Operator verzichtet werden kann. Dabei beruht sie auf Objekt-Komposition.
Olaf Musch

16. Factory Method

Zusammenfassung
Die Factory Method nutzt zur Erzeugung einzelner konkreter Objekte Vererbung, was sie von der Abstract Factory unterscheidet. Darüber hinaus bestehen allerdings viele Ähnlichkeiten zwischen diese beiden Patterns. Es gibt mehrere Varianten für die Umsetzung des Factory Method Patterns.
Olaf Musch

17. Prototype

Zusammenfassung
Für die Erzeugung ähnlicher Objekte, die sich nicht wesentlich voneinander unterscheiden, bietet sich die Verwendung des Prototype Pattern an. Es basiert auf dem Klonen von Objekten und deren anschließend erforderliche Modifikation. Aber Achtung: Beim Klonen gibt es Fallstricke, die zu beachten sind.
Olaf Musch

18. Builder

Zusammenfassung
Das Builder Pattern beschreibt eine Möglichkeit, komplexe oder komplizierte Objekte zu erzeugen, die ggf. in mehreren Arbeitsschritten erstellt werden können oder sogar müssen. Insbesondere in der Zusammenarbeit mit dem Composite Pattern ist das Builder Pattern sehr nützlich.
Olaf Musch

19. Visitor

Zusammenfassung
Wenn Sie auf einer Sammlung verschiedener Objekte mit unterschiedlichen Schnittstellen ähnliche Operationen ausführen wollen, können Sie diese Operationen in einer eigenen Klasse – dem Visitor – zusammenfassen.
Olaf Musch

20. Memento

Zusammenfassung
Die Herausforderung, trotz Kapselung an Daten anderer Objekte heranzukommen um sie zum Beispiel extern zu speichern, kann man auf unterschiedliche Art und Weise angehen. Das Memento-Pattern erlaubt dabei dennoch einen Schutz der internen Daten von Objekten. Die müssen aber selbst eine entsprechende Auskunft über ihren internen Zustand geben können.
Olaf Musch

21. Fassade

Zusammenfassung
Die Fassade gehört zu den Strukturmustern; sie beschreibt, wie Sie unkompliziert auf ein kompliziertes oder komplexes Subsystem zugreifen können. Nach außen zeigen Sie der Welt ein einfaches „Gesicht“ und verbergen die Details so weit wie möglich.
Olaf Musch

22. Adapter

Zusammenfassung
Das Adapter Pattern ist bei richtigem Einsatz in der Lage, zwei unterschiedliche Klassen oder – in seiner objektbasierten Version – Objekte miteinander arbeiten zu lassen. Beide Varianten werden in diesem Kapitel erläutert. Ein sehr hilfreiches Vorgehen bei der Verwendung von fremdentwickelten Klassen.
Olaf Musch

23. Proxy

Zusammenfassung
Der Einsatz des Proxy-Pattern wird immer dann sinnvoll, wenn Sie aus bestimmten Gründen einen „Stellvertreter“ eines Objektes benötigen. Das kann aus Sicherheitsgründen notwendig sein, aber auch für die Erweiterung von Funktionalitäten oder den Zugriff auf entfernte Objekte.
Olaf Musch

24. Decorator

Zusammenfassung
Das Decorator-Pattern erweitert Objekte um Zuständigkeiten und Funktionalitäten, ohne dabei eine Kontrolle von außen zu übernehmen. Auch das erweiterte Objekt wird selbst nicht verändert. Das Pattern ermöglicht auch die „Dekoration“ eines Objekts mit beliebig vielen und beliebig kombinierbaren Eigenschaften bzw. Funktionalitäten.
Olaf Musch

25. Bridge

Zusammenfassung
Das Bridge Pattern überbrückt im wahrsten Sinne des Wortes die Kluft zwischen der Implementierung einer Funktionalität und ihrer Anwendung. Das ermöglicht beiden Seiten, unabhängig voneinander weiterentwickelt zu werden. Auch in der Java Klassenbibliothek finden sich dafür diverse Beispiele.
Olaf Musch

26. Muster kombinieren

Zusammenfassung
In den letzten 23 Kapiteln habe ich die einzelnen Muster erläutert. Jetzt befassen wir uns mit einem Beispiel, für das wir mehrere Muster gleichzeitig verwenden wollen. Anhand eines konkreten Beispiels kombinieren wir 5 verschiedene Entwurfsmuster in einer Anwendung. Worauf dabei zu achten sein wird, soll Thema dieses Kapitels sein.
Olaf Musch

Backmatter

Weitere Informationen

Premium Partner