Aufgabe 08 - Muster-Landkarte
Aufgabe 08 - Muster-Landkarte
Abschnitt betitelt „Aufgabe 08 - Muster-Landkarte“Worum geht es?
Abschnitt betitelt „Worum geht es?“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).
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- 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.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- 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.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- 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).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Adapter in echt
Abschnitt betitelt „Teil A - Adapter in echt“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.
- Schreiben Sie
FederationAdapter, der Ihr Beobachter-Interface aus Aufgabe 06 erfüllt und intern übersetzt. DerCompetition-Code bleibt unberührt. - Testen Sie den Adapter isoliert: richtiges XML, richtige Einheitenumrechnung, Sonderfälle (Umlaute im Namen).
- Wo war der Format-Konverter beim Datenaustausch der 4. Klasse (Aufgabe 19) schon ein Adapter? Zwei Sätze.
Teil B - Die Landkarte
Abschnitt betitelt „Teil B - Die Landkarte“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.
Teil C - Patternitis-Review
Abschnitt betitelt „Teil C - Patternitis-Review“Sie erhalten einen kurzen Code (wird ausgeteilt): eine Temperaturumrechnung, verpackt in AbstractConverterFactory, ConversionStrategyProvider und drei Interfaces. Alles funktioniert, ist aber grotesk übertrieben.
- Schreiben Sie ein Review (Handwerk aus der 4. Klasse): Welche Muster sind hier ohne Problem im Einsatz?
- Wie sähe die angemessene Lösung aus? Schreiben Sie sie (vermutlich unter zehn Zeilen).
- 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“- 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. - Zeigen Sie am Zusammenstecken (
new LoggingReporter(new RetryingReporter(federationAdapter))), dass weder der Adapter nochCompetitiongeändert werden musste. Ein Test belegt: Beim ersten simulierten Fehlschlag wird wiederholt, und das Log enthält beide Versuche. - 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)?
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Woran erkennt man einen Adapter im Code?
- Was unterscheidet einen Decorator von einer Unterklasse, wenn beide Verhalten ergänzen?
- Warum ist die Middleware-Kette einer Webanwendung “Decorator im Großen”?
- Was ist die gemeinsame Idee hinter MVC und einer Schichtenarchitektur?
- 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.