Zum Inhalt springen

Aufgabe 08 - Muster-Landkarte

Zu Zen-Modus wechseln

Sie schließen den Musterblock ab: Sie verbinden eine fremde, inkompatible Schnittstelle mit einem Adapter, stapeln Verhalten mit einem Decorator, vervollständigen die Muster-Landkarte der Klasse und ziehen die Grenze zwischen sinnvollem Muster-Einsatz und “Patternitis” - die wichtigste Fähigkeit im Umgang mit Mustern ist, sich begründet gegen eines zu entscheiden (siehe Kapitel Entwurfsmuster III).

  • Kapitel Entwurfsmuster III (Adapter, Decorator, MVC/Schichten, Patternitis).
  • Ihr Sporttag-Szenario aus Aufgabe 06; die bisherige Steckbrief-Sammlung.
  • Ein TypeScript-Projekt mit Testrunner; Ihr Review-Handwerk aus der 4. Klasse.
  • Sie schreiben einen Adapter, der eine fremde Schnittstelle auf Ihre eigene übersetzt, ohne den Bestandscode zu ändern.
  • Sie ergänzen Verhalten mit kombinierbaren Decorator-Schichten.
  • Sie ordnen alle behandelten Muster nach Problemklassen und beurteilen übertriebenen Muster-Einsatz.
  • Reproduktion: die Muster-Landkarte des Kapitels zusammenstellen (Teil B).
  • Reorganisation und Transfer: einen Adapter für ein echtes Integrationsproblem bauen (Teil A).
  • Reflexion, Problemlösung und Urteilsbildung: Patternitis diagnostizieren und Verhalten mit Decorator sauber schichten (Teile C und D).

Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.

Ihr Sporttag-Szenario (Aufgabe 06) soll Zeiten an das “offizielle” Verbandssystem melden. Dessen simulierte Bibliothek hat eine völlig andere Schnittstelle: FederationClient.send(xmlString) erwartet XML mit anderen Feldnamen und Zeit in Millisekunden statt Sekunden.

  1. Schreiben Sie FederationAdapter, der Ihr Beobachter-Interface aus Aufgabe 06 erfüllt und intern übersetzt. Der Competition-Code bleibt unberührt.
  2. Testen Sie den Adapter isoliert: richtiges XML, richtige Einheitenumrechnung, Sonderfälle (Umlaute im Namen).
  3. Wo war der Format-Konverter beim Datenaustausch der 4. Klasse (Aufgabe 19) schon ein Adapter? Zwei Sätze.

Erstellen Sie in Gruppen die Muster-Landkarte als Übersichtsgrafik: alle behandelten Muster (Singleton, Factory, Observer, Strategy, Command, Adapter, Decorator, MVC/Schichten), gruppiert nach Erzeugung/Verhalten/Struktur, je Muster eine Leitfrage (“Brauche ich genau eine Instanz?” → Singleton). Die beste Landkarte der Klasse wird das offizielle Matura-Poster.

Sie erhalten einen kurzen Code (wird ausgeteilt): eine Temperaturumrechnung, verpackt in AbstractConverterFactory, ConversionStrategyProvider und drei Interfaces. Alles funktioniert, ist aber grotesk übertrieben.

  1. Schreiben Sie ein Review (Handwerk aus der 4. Klasse): Welche Muster sind hier ohne Problem im Einsatz?
  2. Wie sähe die angemessene Lösung aus? Schreiben Sie sie (vermutlich unter zehn Zeilen).
  3. Formulieren Sie Ihre persönliche Faustregel, wann ein Muster gerechtfertigt ist.

Teil D - Expertenteil: Verhalten schichten mit Decorator

Abschnitt betitelt „Teil D - Expertenteil: Verhalten schichten mit Decorator“
  1. Der Versand an den Verband ist unzuverlässig. Bauen Sie einen Decorator, der einen beliebigen Beobachter umhüllt und Wiederholung bei Fehler ergänzt (RetryingReporter), sowie einen zweiten, der jeden Versand protokolliert (LoggingReporter). Beide erfüllen dasselbe Interface wie der Adapter und lassen sich in beliebiger Reihenfolge stapeln.
  2. Zeigen Sie am Zusammenstecken (new LoggingReporter(new RetryingReporter(federationAdapter))), dass weder der Adapter noch Competition geändert werden musste. Ein Test belegt: Beim ersten simulierten Fehlschlag wird wiederholt, und das Log enthält beide Versuche.
  3. Beurteilen Sie in drei Sätzen: Warum ist diese Schichtung dem Einbau von Retry und Logging direkt in den Adapter überlegen, und wo haben Sie dieselbe Idee schon gesehen (Stichwort Middleware)?
  1. Woran erkennt man einen Adapter im Code?
  2. Was unterscheidet einen Decorator von einer Unterklasse, wenn beide Verhalten ergänzen?
  3. Warum ist die Middleware-Kette einer Webanwendung “Decorator im Großen”?
  4. Was ist die gemeinsame Idee hinter MVC und einer Schichtenarchitektur?
  5. Nennen Sie Ihre Faustregel gegen Patternitis in einem Satz.

Der Adapter mit Tests, der Beitrag zur Landkarte, das Patternitis-Review samt Gegenentwurf und die gestapelten Decorator-Schichten mit Nachweistest.