Entwurfsmuster Flashcards
(49 cards)
Welches Muster wenn “viele unterschiedliche, nicht verwandte Operationen auf einer Objektstruktur realisiert werden sollen”
Visitor
Welches Muster wenn “sich die Klassen der Objektstruktur nicht ändern”
Visitor
Welches Muster bei “häufig neue Operationen auf der Objektstruktur integriert werden müssen”
Visitor
Welches Muster wenn “ein Algorithmus über die Klassen einer Objektstruktur verteilt arbeitet, aber zentral verwaltet werden soll”
Visitor
Bei welchem Muster kommt “Element” vor?
Visitor
Bei welchem Muster kommt “Visitor” vor?
Visitor (duh)
Was sind Eigenschaften vom Visitor Pattern?
- Leicht neue Operationen (durch neue Visitor Klassen) hinzufügen
- Die Visitor und Element Hierarchie ist unabhängig
- Element hinzufügen -> viele neue Methoden schreiben
Was simuliert das Visitor Pattern?
Multimethoden
Welches Muster wenn “auf die Inhalte eines Aggregates zugegriffen werden muss, ohne die innere Darstellung offen legen zu müssen”
Iterator
Welches Muster wenn “mehrere (gleichzeitige bzw. überlappende) Abarbeitungen der Elemente in einem Aggregat erfolgen muss”
Iterator
Welches Muster wenn “eine einheitliche Schnittstelle für die Abarbeitung verschiedener Aggregatstrukturen gebraucht wird, um polymorphe Iteration zu unterstützen”
Iterator
Bei welchem Muster kommt “Aggregate” vor?
Iterator
Welche Eigenschaften haben Iterator?
- beliebige Abarbeitung der Elemente (Baum, Liste vorwärts oder rückwärts, …)
- sie vereinheitlichen den Zugriff auf verschiedene Arten von Aggregaten
- es können mehrere gleichzeitige Abarbeitungen stattfinden (wenn man nicht dumm ist und den Iterator richtig implementiert)
Welche 2 Arten von Iteratoren gibt es?
Extern:
- hasNext und next sind public und der user schreibt den loop
Iterator<T> it = …
while (it.hasNext()) {}</T>
Intern
- hasNext und next sind private
- bei funktionaler Programmierung häufig
for (T value : values) {}
bzw.
… .stream().map(…). …
Was sind Probleme von Iteratoren?
- Die Struktur der zu Grunde liegenden Datenstruktur geht verloren (Baumstruktur). In diesem Fall evtl. interne Iteratoren bzw. gar keine Iteratoren verwenden
- Verändern/hinzufügen des Aggregates während des Iterierens ist problematisch. Ineffiziente Lösung: Daten einfach kopieren. Besser: Daten nicht kopieren; wenn das gelingt, spricht man von einem robusten Iterator
Welches Muster wenn “man den unveränderlichen Teil des Algorithmus nur einmal implementieren will und es Unterklassen zu überlassen, den veränderbaren Teil des Verhaltens festzulegen”
Template-Method
Welches Muster wenn “gemeinsames Verhalten mehrere Unterklassen (zum Beispiel im Zuge einer Refaktorisierung) in einer einzigen Klasse lokal zusammengefasst werden soll, um Duplikate im Code zu vermeiden”
Template-Method
Welches Muster wenn “man mögliche Erweiterungen in Unterklassen zu kontrollieren möchte, die Hooks als primitive Operationen aufrufen und nur das Überschreiben dieser Hooks (keiner anderer Methoden) in Unterklassen ermöglichen”
Template Method
Was ist das Hollywood Prinzip und wo tritt es auf?
“Don’t call us, we’ll call you”
Die Oberklasse ruft Methoden der Unterklasse auf (sonst meistens umgekehrt)
Bei Template-Method, Factory
Welche 2 Arten von überschreibbaren Operationen gibt es bei Template-Methods?
Abstrakte Methoden (müssen überschrieben werden) und Hooks (können überschrieben werden, haben aber auch eine Default Implementierung)
Was für eine Art von Entwurfsmuster ist die Factory-Method?
Erzeugendes Entwurfsmuster
Welches Muster wenn “eine Klasse Objekte erzeugen soll, deren Klasse aber nicht kennt”
Factory-Method
Welches Muster wenn “eine Klasse möchte, dass ihre Unterklassen die Art der Objekte bestimmen, welche die Klasse erzeugt”
Factory-Method
Welches Muster wenn “Klassen Verantwortlichkeiten an eine von mehreren Unterklassen delegieren und das Wissen, an welche Unterklasse delegiert wird, lokal gehalten werden soll”
Factory-Method