Quantcast
Channel: FrankTheDevop
Viewing all articles
Browse latest Browse all 27

Decorator Pattern – Patterns III

$
0
0

Einleitung

Erinnerst du dich noch an die Aufgabenstellung aus meinem Artikel Strategy Pattern – Patterns I? An das Mittelalter Spiel das du und deine Kollegen entwickeln sollt?

Der Kunde kam in letzter Minute und wollte optische Effekte auf den Waffen haben. Deswegen hast du dir Gedanken gemacht wie das sauber umgesetzt werden kann. Letztendlich hast du das Strategy Pattern angewendet, auf ein Interface programmiert und die konkrete Umsetzung (den Effekt) zur Laufzeit austauschbar gemacht.

 

Nachdem ihr einen präsentablen Prototyp hattet habt ihr ihn dem Kunden präsentiert und dieser war begeistert. Diese Farben! Und man erkennt welche Waffe mit welchem Effekt belegt ist. Superb!

UML-Klassendiagramm Strategy Pattern Waffe Komposition mit Waffeneffekt

Zur Erinnerung das Klassendiagramm mit dem Strategy Pattern

 

Am nächsten Morgen ruft der Kunde jedoch wieder an und will von dir die Bestätigung das damit auch 2 Effekte zusammen funktionieren. Du stockst erstmal, überlegst schnell und sagst ihm wahrheitsgemäß das es nicht geht. Daraufhin ist er schockiert und beauftragt dich diesen Bug zu beheben. Effekte müssen miteinander kombinierbar sein, das geht doch in jedem Spiel!

 

Du versprichst dich darum zu kümmern und legst auf. Du willst deinem Chef kein Problem melden ohne ein Lösung parat zu haben. Und deine Kollegen willst du diesmal auch überraschen. Wäre doch gelacht wenn du nicht selbst eine Lösung finden könntest.

Hmm … mehrere Effekte, da könnte ich doch eine Array oder eine Liste verwenden. Dann füge ich der Methode zum zeichnen noch eine Schleife über alle vorhandenen Effekte hinzu. Ja, das ist doch ein Ansatz … . Nur wie berechne ich das dann? Ich muss die Farbe von jedem Effekt nehmen und miteinander ins Verhältnis setzen … Also noch eine temporäre Variable auf der ich rechne … Ne, das ist eine Funktionalität die öfters aufgerufen wird, das muss in eine Funktion … Ja, so geht es: Ich ändere den Variablentypen ab damit ich mehrere Waffeneffekte aufnehmen kann, dann füge ich eine Funktion hinzu die über alle Waffeneffekte iteriert und die fertige Farbe berechnet.

Aber was mache ich wenn weitere Funktionalität gebraucht wird? Wenn auch noch Faktoren für die Schadensberechnungen hinzugefügt werden sollen? Eine weitere Funktion?

 

Du merkst das dieser Ansatz nicht optimal ist, bis dir auffällt das der Waffeneffekt doch eigentlich eine Erweiterung für die Waffe ist. Also eigentlich packt der Effekt doch die Waffe ein, wie man Geschenke zum Versand in Verpackungen einpackt. Dann könnte doch der erste Effekt die Waffe einpacken und der zweite Effekte die verpackte Waffe und immer so weiter. Ja, das klingt doch viel besser!

Decorator Pattern oder Erkenntnis

Mit deinem neuen Einfall gehst du zu deinen Kollegen, erzählst ihnen zuerst von dem Kundenanruf und dann von deinem Vorschlag für die Umsetzung. Nachdem du es ihnen erklärt hast schauen sie dich an und sagen dir:

Klar kannst du das so lösen. Das ist auch ein Entwurfsmuster, es nennt sich Decorator Pattern. Das kommt daher das du ein Objekt hast welches du mit weiterem Verhalten erweitern willst und es somit dekorierst. So wie z.B. der Milchschaum einen Latte Macciato dekoriert.

Du zeigst das du fachlich gewachsen bist, das du dieses Mal den Ansatz selbst gefunden hast, auch wenn dir der Name Decorator Pattern nicht bekannt war.

Du bist stolz wie Oskar und präsentierst es deinem Chef. Dieser beauftragt dich gleich mit dem Entwurf der UML Diagramms. Das sollen deine Kollegen verifizieren und dann sollst du es anschließenden selbstständig implementieren.

Dein Klassendiagramm Entwurf sieht folgendermaßen auf:

Decorator Pattern UML Klassendiagramm

Decorator Pattern UML Klassendiagramm

 

Als du es deinen Kollegen zeigst klopfen sie dir auf die Schulter und sagen dir das du das gut gemacht hast. Du hast dich gemacht und kannst dich nun an die Implementierung des Decorator Patterns machen. So macht ihr euren Kunden glücklich.

 

Nachdem du das Decorator Pattern fertig implementiert und von deinen Kollegen wie deinem Chef freigeben lassen hast darfst du eurem Kunden die Gute Nachricht überbringen. Du rufst ihn an, präsentierst ihm stolz den Entwurf und er ist total begeistert. Damit kann er soviele Effekte übereinander legen wie er will. Und wie nennt Ihr das ? Decorator Pattern? Das muss ich mir merken. Das gibt einen fetten Bonus!

 

Als du deinen Kollegen und deinem Chef davon berichtest beschließt der Chef das ihr am Wochenende zusammen in einem Hotel Essen und trinken geht inklusive Übernachtung. Das muss gefeiert werden!

Und so bist du der Held des Monats geworden.

Hat dir mein Artikel gefallen? Dann teile ihn mit Freunden oder Kollegen! Hast du etwas nicht verstanden oder möchtest du etwas zur Verbesserung des Artikels beitragen? Dann schreib in die Kommentare! Du hast eine weitere Quelle die den Artikel verbessern könnte? Immer in die Kommentare damit.

 

Weitere Informationen findest du (teilweise auf englisch) auch in den Quellen.

 

Ich hoffe du kommst wieder zu Teil IV: dem Factory Method Muster.

 

Quellen

Entwurfsmuster von Kopf bis Fuß

Decorator Pattern von falafel.com

Decorator Pattern von Philipp Hauer

Strategy Pattern – Patterns I

Der Beitrag Decorator Pattern – Patterns III erschien zuerst auf Frank the DevOp.


Viewing all articles
Browse latest Browse all 27

Trending Articles