Muster: Strategy
Die Strategie gehört zur Kategorie der Verhaltensmuster (Behavioural Patterns). Sie definiert eine Familie austauschbarer Algorithmen.
Verwendung
[Bearbeiten]Strategie-Objekte werden ähnlich wie Klassenbibliotheken verwendet. Im Gegensatz dazu handelt es sich jedoch nicht um externe Programmteile, die als ein Toolkit genutzt werden können, sondern um integrale Bestandteile des eigentlichen Programms, die deshalb als eigene Objekte definiert wurden, damit sie durch andere Algorithmen ausgetauscht werden können.
Meistens wird eine Strategie durch Klassen umgesetzt, die eine bestimmte Schnittstelle implementieren. In Sprachen wie Smalltalk, in denen auch der Programmcode selbst in Objekten abgelegt werden kann, kann eine Strategie aber auch durch solche Code-Objekte realisiert werden.
Die Verwendung von Strategien bieten sich an, wenn
- viele verwandte Klassen sich nur in ihrem Verhalten unterscheiden.
- unterschiedliche (austauschbare) Varianten eines Algorithmus benötigt werden.
- Daten innerhalb eines Algorithmus vor Klienten verborgen werden sollen.
- verschiedene Verhaltensweisen innerhalb einer Klasse fest integriert sind (meist über Mehrfachverzweigungen) aber
- die verwendeten Algorithmen wiederverwendet werden sollen, bzw.
- die Klasse flexibler gestaltet werden soll.
UML-Diagramm
[Bearbeiten]Akteure
[Bearbeiten]- Strategie
- definiert eine einheitliche Schnittstelle für alle unterstützten Algorithmen
- KonkreteStrategie
- implementiert einen Algorithmus
- Verwendung über Strategieschnittstelle
- eventuell Zugriff auf Daten des Kontexts über entsprechende Methoden
- Kontext
- Konfiguration mit konkretem Strategieobjekt
- hält Referenz auf konkretes Strategieobjekt
- nutzt konkretes Strategieobjekt über Strategieschnittstelle
- definiert eventuell Schnittstelle für Kontextinformationen
Vorteile
[Bearbeiten]- Es wird eine Familie von Algorithmen definiert.
- Strategien bieten eine Alternative zur Unterklassenbildung.
- Strategien helfen, Mehrfachverzweigungen zu vermeiden, und verbessern dadurch die Wiederverwendbarkeit.
- Strategien ermöglichen die Auswahl aus verschiedenen Implementationen und erhöhen dadurch die Flexibilität.
Nachteile
[Bearbeiten]- Klienten müssen die unterschiedlichen Strategien kennen, um zwischen ihnen auswählen und den Kontext initialisieren zu können.
- Gegenüber der Implementation der Algorithmen im Kontext erzeugen Strategien zusätzlichen Kommunikationsaufwand zwischen Strategie und Kontext.
- Des Weiteren wird die Anzahl von Objekten erhöht.
Beispiel
[Bearbeiten]Als Beispiel kann ein Steuerprogramm dienen, das die Berechnung von Steuersätzen in Strategie-Objekte auslagern soll, um einfach länderabhängig konfigurierbar zu sein. Ein anderes Beispiel wäre die Speicherung eines Dokuments oder einer Grafik in verschiedenen Dateiformaten. Auch ein Packer, der verschiedene Kompressionsalgorithmen unterstützt, kann mit Hilfe von Strategie implementiert sein. Bei Java wird das Entwurfsmuster zum Beispiel zur Delegierung des Layouts von AWT-Komponenten an entsprechende LayoutManager (BorderLayout,FlowLayout etc.) verwendet.