Java Reference
In-Depth Information
gie über eine Aggregationsbeziehung verbunden und kann so die Strategie nutzen.
Die Aggregationsbeziehung erlaubt es nun dem Kontextobjekt, alle möglichen unter-
schiedlichen konkreten Strategien zu nutzen, solange die konkreten Strategien das
Interface
IStrategie
realisieren und den Vertrag des Interface nicht brechen. Alle
verschiedenen Algorithmen der Klassen
KonkreteStrategieX
(X = A..Z)
imple-
mentieren dabei das definierte Interface
IStrategie
. Das Interface
IStrategie
wird vom Kontext vorgegeben. Da jede konkrete Strategie dieses Interface erfüllen
muss, hängt der Kontext nicht von der jeweiligen konkreten Strategie ab. Das wird als
Dependency Inversion
bezeichnet (siehe Kapitel 1.9.1). Das folgende Bild zeigt das
Klassendiagramm:
Kontext
«interface»
IStrategie
strategie
+ operation() : void
+ algorithmus() : void
ruft auf:
strategie.algorithmus()
KonkreteStrategieA
KonkreteStrategieB
+ algorithmus() : void
+ algorithmus() : void
Bild 4-36 Klassendiagramm des Strategie-Musters
Die Klasse
Kontext
aggregiert das Interface
IStrategie
. Das dieses Interface im-
plementierende Objekt ist damit Teil des Kontextobjekts und kann - falls gewünscht -
jederzeit zur Laufzeit ausgetauscht werden. Der Kontext muss für seine Umgebung
daher eine Möglichkeit bieten, um diese Referenz zu setzen. Dies wird auch als
Konfi-
guration des Kontextes
bezeichnet.
4.12.3.2 Teilnehmer
Folgende Klassen bzw. Interfaces sind an dem Entwurfsmuster beteiligt:
Kontext
Die Klasse
Kontext
aggregiert als Abstraktion das Interface
IStrategie
. In Java
enthält die Klasse
Kontext
dazu eine Referenz
strategie
vom Typ des Interface
IStrategie
. Durch diese Referenz wird die zu verwendende Strategie festgelegt.
Durch
strategie.algorithmus()
wird die gewählte Strategie ausgeführt.
IStrategie
Das Interface
IStrategie
wird von allen unterstützten Algorithmen realisiert. Es wird
dazu verwendet, um einen durch eine der Klassen
KonkreteStrategieX
implemen-
tierten Algorithmus aufzurufen.
Search WWH ::
Custom Search