Titel |
Design Patterns mit Java
|
Editor |
Florian Siebler
|
Sprache |
Deutsch
|
Genre |
Fachbuch
|
Herausgeber |
Carl Hanser Verlag, 2014
|
Seitenanzahl |
311 Seiten
|
Wer bei der „Gang of Four“ zuerst an die Daltons denkt, hat sicherlich wenig mit Entwurfsmustern (Englisch: Design Patterns) zu tun. Wenn man aber zur programmierenden Zunft in einer objektorientierten Sprache gehört, sind Entwurfsmuster oft das A und O und sollten von jedem zumindest einmal gehört worden sein. Die Rezension soll zeigen, ob das Buch „Design Patterns mit Java“ dabei helfen kann.
Geschichtliches
Entwurfsmuster reichen (in der Zeitrechnung der Programmierung) schon ziemlich lange zurück. Es handelt sich dabei um Muster, die man zur Lösung immer wiederkehrender Probleme und Fragestellungen nutzen kann. Auch wenn die Gang of Four (kurz GoF), dazu gehören Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides, die Entwurfsmuster nicht erfunden haben, haben sie 1995 mit ihrem Buch „Design Patterns. Elements of Reusable Object-Oriented Software” zumindest sehr zu deren Verbreitung beigetragen.
In dem GoF-Buch sind 23 Design-Patterns beschrieben mit Beispielanwendungen in der Programmiersprache C++, die der Autor Florian Siebler in seinem Buch „Design Patterns mit Java“ ebenfalls aufgreift, erklärt und beispielhaft mit Java umsetzt.
Buchaufbau
Das Buch ist, in Anlehnung an die Gang of Four, in 24 Kapitel untergliedert: 23 für Entwurfsmuster und eines für Designprinzipien, darunter auch ein Teil der SOLID-Prinzipien. Die Kapitel bauen dabei so gut wie gar nicht aufeinander auf, sodass man nicht gezwungen ist, das Buch von vorne nach hinten durchzulesen. Man kann sich auch einfach nur mit einem Kapitel beschäftigen, wenn einen ein bestimmtes Entwurfsmuster interessiert.
In jedem Kapitel wird das jeweilige Entwurfsmuster vorgestellt und mindestens ein kleines Beispiel dazu gezeigt. In manchen Kapiteln wird dabei auch erst eine naive Implementierung in Java gezeigt und auf deren Vor- und Nachteile hingewiesen. Danach folgt meist eine Verbesserung der Umsetzung oder eine alternative Lösung. Dies ist vor allem in den ersten zwei Kapiteln zum Singleton-Pattern und Observer-Pattern in Bezug auf nebenläufige Verwendung sehr hilfreich.
Zusätzlich zeigt Florian Siebler auch immer eine Verwendung des Entwurfsmusters in einer der Java-Bibliotheken auf, sodass Leser sofort sehen, dass die Muster keine theoretischen Überlegungen sind, sondern auch in der realen Welt zum Einsatz kommen.
Die Listings und Beispiele sind dabei oft nur gekürzt enthalten. Der Autor verweist dazu immer wieder auf die Webseite zum Buch patternsBuch.de.
Etwas überraschend ist der Abschluss des Buches, denn es gibt keinen. Nach den 23 Entwurfsmustern kommt der Index und es ist Schluss.
Zielgruppe
Das Buch heißt nicht umsonst „Design Patterns mit Java“, denn Java wird zum Verständnis der Muster bzw. deren Umsetzung vorausgesetzt. Vor allem die Hinweise auf die Verwendung der Entwurfsmuster in den Java-Bibliotheken verstehen oft nur die Java-Entwickler, welche die jeweilige Bibliothek auch schon im Einsatz hatten. Das macht ein Teil des Buches für Nutzer anderer Programmiersprachen leider hinfällig, da man nicht immer folgen kann und diese Abschnitte dann eher überspringt.
Dennoch kann man auch ohne (große) Java-Kenntnisse den Umsetzungen folgen und diese in einer Sprache seiner Wahl nachprogrammieren. Von den online bereitgestellten Beispielen hat man in dem Fall natürlich sehr wenig.
Die online bereitgestellten Beispiele zeigen aber auch, dass die Zielgruppe am besten über einen Internetanschluss verfügt, wenn man das Buch durcharbeiten möchte. Denn ansonsten fällt es manchmal etwas schwer, nur anhand der Code-Auszüge der Umsetzung zu folgen.
Design Patterns en detail
Florian Siebler geht sehr gut auf die einzelnen Entwurfsmuster ein. Wie oben schon erwähnt zeigt er nicht nur verschiedene Realisierungen mit deren Vor- und Nachteilen auf, sondern geht auch auf Besonderheiten wie Nebenläufigkeit ein – etwas, was bei anderen Design-Patterns-Büchern gerne unterschlagen wird. Die vorgestellten Lösungen sind dabei natürlich Java-abhängig und in anderen Sprachen muss man sich bei Nebenläufigkeit andere Lösungen ausdenken bzw. die vorgestellte Idee zumindest anders umsetzen. Sehr schön ist auch, dass er auf sogenannte Anti-Patterns eingeht, zu denen sehr viele Entwickler beispielsweise das Singleton-Pattern zählen.
Für die Erklärung der Patterns benutzt Siebler mehr Text und wenig Klassen-Diagramme. Als Grund hierfür führt der Autor an, dass die Diagramme der unterschiedlichen Entwurfsmuster oft sehr ähnlich bzw. sogar identisch aussehen. Einem Einsteiger in Entwurfsmuster bringen diese Diagramme daher wenig. So werden sie auch nur gezielt dort eingesetzt, wo es der Übersicht hilft. Dennoch wäre eine Gesamtübersicht der Entwurfsmuster mit deren Klassenbeziehungen am Ende des Buches schön gewesen.
Ein Problem bei der Umsetzung der Entwurfsmuster im Buch ist aber, dass nicht jede Realisierung sofort klar ist. Beispielsweise wird beim State-Pattern eine Lösung eingesetzt, in der ein Zustand das Hauptobjekt und seine Folgezustände kennen muss. Da man normalerweise eine lose Koppelung anstrebt, ist das verwunderlich, wird aber später erklärt. Dies passiert dem Autor an vielen Stellen im Buch, dass die Motivation für eine Umsetzung oder einen Exkurs (wie z. B. die Tabellenmodelle auf Seite 45) erst ganz am Ende des Abschnitts erklärt werden. Als Leser fragt man sich aber viel eher, wieso etwas auf eine bestimmte Art und Weise gemacht wird oder was dieser Exkurs genau bringen soll.
Ob die Auswahl der Patterns sinnvoll ist, darüber lässt sich sicherlich streiten. Florian Siebler orientiert sich an den Entwurfsmustern der Gang of Four, was so schlecht nicht sein kann. Dabei wird aber beispielsweise auch das Interpreter-Pattern erklärt, was so speziell und komplex ist, dass es vor allem für Einsteiger schwer zu verstehen ist.
Fazit
Mit dem Buch „Design Patterns mit Java“ will Florian Siebler laut Untertitel eine „Einführung in Entwurfsmuster“ geben. Vergleicht man direkt mit dem GoF-Buch, was ja als Vorlage diente, so ist ihm das gelungen. Wo das GoF-Buch doch eher trocken herüberkommt, gibt es bei Siebler meist einfach zu verstehende Beispiele, die teilweise mit Pop-Culture-Referenzen gespickt sind. So liest sich das Buch recht flüssig und unterhaltsam.
Ohne Java-Kenntnisse fällt es aber oft schwer zu folgen. Vor allem die Nachweise in den Java-Bibliotheken sind nicht immer verständlich, wenn man die Bibliothek noch nie genutzt hat. Glücklicherweise sind die Nachweise aber nur ein Zusatz. Die Entwurfsmuster werden immer auch an einem eigenen Beispiel erprobt.
Diese Beispiele wiederum werden leider nur zum Teil abgedruckt. Es ist so nicht möglich, ohne Internetzugang allen Ausführungen zu folgen bzw. diese nachzuimplementieren. Teilweise empfindet man die zahlreichen Verweise auf die Buchwebseite patternsbuch.de sogar als störend, weil sie den eigentlichen Gedanken- bzw. Arbeitsfluss unterbrechen.
Und wenn es um Entwurfsmuster und Java geht, drängt sich ein Vergleich mit dem Buch „Entwurfsmuster von Kopf bis Fuß“ („Head First Design Patterns“) natürlich auf. Hier hat das Head-First-Buch nicht nur den Kopf, sondern auch die Nase vorn. Didaktisch ist es sowieso nicht zu schlagen, aber alle Beispiele sind so einfach, verständlich und vor allem unterhaltsam gehalten, dass das Lesen und Durcharbeiten einfach nur Spaß macht. Vor allem können auch Nicht-Java-Programmierer das Head-First-Buch fast ohne Probleme durcharbeiten (wenn auch nicht ganz).
Wer also eine etwas nüchterne, aber dennoch unterhaltsame Erklärung der GoF-Entwurfsmuster sucht und diese auch noch mit Java umsetzen will, kann ohne Bedenken zum Buch von Florian Siebler greifen. Wer dagegen keine Java-Kenntnisse hat und das eher trockene GoF-Buch mit seinen C++-Beispielen nicht durcharbeiten möchte, dem sei „Entwurfsmuster von Kopf bis Fuß“ empfohlen (am besten im englischen Original, was weniger Fehler aufweist).