Klassifizierung |
objektbasiertes Verhaltensmuster
|
| |
Zweck |
Definiere eine Familie von Algorithmen und
mache sie untereinander austauschbar.
Der Algorithmus kann dynamisch vom Klienten ausgewählt
werden
|
| |
|
Funktionen als Parameter in reinen OOP-Sprachen (Java,
Eiffel, nicht C++)
|
| |
Alias |
strategy
policy
|
| |
Motivation |
Sortierung:
Ein Klient hat ein Feld das sortiert werden soll
der Sortieralgorithmus soll aber variiert werden können
|
| |
Beispiel |
|
| |
Anwendbarkeit |
|
|
Parametrisierung mit Algorithmen
|
|
Prozeduren und Funktionen als Parameter
|
|
Prozeduren und Funktionen in Datenstrukturen
|
|
dynamische Binden wird zum Parametrisieren ausgenutzt
|
| |
Struktur |
Strukturdiagramm
|
| |
Teilnehmer |
|
Command |
Schnittstelle für die Algorithmus-Familie
|
Command[1-2] |
konkreter Algorithmus doIt wird implementiert
|
Context |
wird mit einem konkreten Algorithmus konfiguriert
und ruft diesen aus seinen Methoden heraus auf
|
|
operation()
spielt die gleiche Rolle wie die Schablonenmethode im
gleichnamigen Muster
|
| |
Konsequenzen |
|
|
Wiederverwendung von Algorithmen
|
|
flexiblerer Alternative zu Unterklassenbildung
|
|
wenn Strategie-Objekte zustandslos sind, können sie gemeinsam
genutzt werden
--> Fliegengewicht
|
|
Kommandos kombiniert mit forall Funktionen
zum Verarbeiten aller Elemente eines Containers sind
oft eleganter und effizienter als Iterator-Anwendungen
|
| |
Implementierung |
|
|
die Referenz im Strukturmuster kann auch
temporär sein
Referenzen als lokale Variable oder aktueller Parameter
Beispiel in Java
|
| |
Beispiele |
|
|
Beispiel für die unabhängige
Auswahl eines Sortierers und einer
Vergleichsfunktion
|
|
Verarbeitung aller Elemente in Containern
die Art der Container kann variieren
die Verarbeitung kann variieren
beide Teile können frei kombiniert werden
|
| |
Bekannte Verwendungen |
|
|
|
|
Umsetzung der funktionalen Programmierung in OOP
|
|
Anwendung in Containern für beliebige Elemente, bei deren
Implementierung bestimmte Eigenschaften der Elemente für
den Container notwendig sind, zum Beispiel ein Gleichheitstest,
eine Ordnungsrelation
oder eine hash-Funktion.
|
| |
verwandte Muster |
|
|
für zustandslose
Algorithmen
|
| |
|
mehrere Algorithmen für unterschiedliche Ausprägungen einer
Klasse werden in einem Besucher zusammengefasst
|
| |
|
weniger flexibel
|
Vergleich |
|
| |