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  | 
        | 
  |  |