Technischer Projektleiter
Java-Entwurfsmuster (design pattern): Strategy
Heute werfen wir einen Blick auf das nächste Entwurfsmuster (Java design patterns) aus der Kategorie der Verhaltensmuster (Behavioral Patterns) – Strategy. Entwurfsmuster in dieser Kategorie befassen sich mit der Kommunikation(interaction) zwischen Objekten und ihrer Verantwortung (responsibility).
Was ist das Entwurfsmuster Strategy?
Strategy ist ein Entwurfsmuster, das es ermöglicht, das Verhalten einer Klasse oder ihre Algorithmen dynamisch zur Laufzeit anzupassen. Wenn wir beispielsweise eine Klasse haben, die Daten validiert, muss ihre Struktur vor dem Programmstart nicht bekannt sein. Die Entscheidung, welcher Validierungsalgorithmus verwendet wird, erfolgt erst unmittelbar vor der Anwendung.
Was für ein Problem löst das Entwurfsmuster Strategy?
Das Entwurfsmuster Strategy löst das Problem, wenn wir flexibel den Weg ändern müssen, wie eine bestimmte Funktionalität zur Laufzeit implementiert wird. Es ermöglicht, eine Familie von Algorithmen oder Strategien zu definieren, jede in einer eigenen Klasse zu kapseln und sicherzustellen, dass die Objekte dieser Klassen austauschbar sind. Das Hauptziel des Entwurfsmuster Strategy ist es, die Möglichkeit zu bieten, das Verhalten eines Objekts dynamisch basierend auf der gewählten Strategie zu ändern. Zum Wechseln der Strategien wird ein Kontextobjekt verwendet, das eine Referenz auf das Strategieobjekt hält und dessen Methoden aufrufen kann.
Ein Beispiel für eine Strategie-Implementierung in Java.
Dieser Code demonstriert die Verwendung des Entwurfsmuster Strategy im Kontext eines Eishockeytrainers (Coach) und seiner Fähigkeit, das Spiel zwischen Offensiv- und Defensivstrategien auf der Grundlage des aktuellen Stands des Spiels zu wechseln. HernaStrategia.java
package designpatterns;
public interface HernaStrategia {
void vykonat();
}
HernaStrategia ist ein Interface, das definiert, wie eine Strategie implementiert werden kann. Sie enthält eine einzige vykonat()-Methode, die definiert, wie die Strategie ausgeführt werden soll. UtocnaStrategia.java, ObrannaStrategia.java
package designpatterns;
public class UtocnaStrategia implements HernaStrategia {
@Override
public void vykonat() {
System.out.println("Tím hrá v útočnej formácii.");
}
}
public class ObrannaStrategia implements HernaStrategia {
@Override
public void vykonat() {
System.out.println("Tím prechádza do obrannej formácie.");
}
}
UtocnaStrategia und ObrannaStrategia sind konkrete Implementierungen der Schnittstelle HernaStrategia. Jede dieser Klassen implementiert die Methode vykonat(), um eine spezifische Strategie auszuführen – entweder eine Angriffsstrategie oder eine Verteidigungsstrategie. Coach.java
package designpatterns;
// Kontext
public class Coach {
private HernaStrategia hernaStrategia;
public void zmenitStrategiu(HernaStrategia novaStrategia) {
this.hernaStrategia = novaStrategia;
}
public void vykonatStrategiu() {
hernaStrategia.vykonat();
}
}
Coach ist ein Kontext, der eine Strategie anwendet. Coach hat ein Attribut hernaStrategia, das die aktuelle Strategie speichert. Die Methode zmenitStrategiu() dient dazu, die aktuelle Strategie zu ändern, und die Methode vykonatStrategiu() führt sie aus. Main.java
import designpatterns.Coach;
import designpatterns.HernaStrategia;
import designpatterns.ObrannaStrategia;
import designpatterns.UtocnaStrategia;
public class Main {
public static void main(String[] args) {
Coach coach = new Coach();
HernaStrategia utocnaStrategia = new UtocnaStrategia();
HernaStrategia obrannaStrategia = new ObrannaStrategia();
System.out.println("Začala sa hra.");
// Coach vyberá stratégiu podľa priebehu hry
// Začíname s útočnou stratégiou
coach.zmenitStrategiu(utocnaStrategia);
coach.vykonatStrategiu();
System.out.println("Tím striela gól a vedie.");
// Ak tím vyhráva, zmeníme na obrannú stratégiu
// (simulujeme, že sa tím dostáva do obrannej fázy, keď vedie v zápase)
coach.zmenitStrategiu(obrannaStrategia);
coach.vykonatStrategiu();
System.out.println("Súper striela gól a vyrovnáva.");
// Ak tím prehráva, môžeme sa opäť vrátiť k útočnej stratégii
// (simulujeme, že tím znova prechádza do útočnej fázy, keď prehráva)
coach.zmenitStrategiu(utocnaStrategia);
coach.vykonatStrategiu();
}
}
In Main wird eine Instanz von Coach und zwei Instanzen von Strategien – eine offensive und eine defensive – erstellt. Es folgt eine Spielsimulation, bei der die Strategien je nach Spielverlauf gewechselt werden. Die Ausgabe dieses Beispiels ist:
Zusammenfassung
Das Entwurfsmuster Strategy wird häufig verwendet, wenn wir das Verhalten einer Klasse oder ihre Strategien dynamisch nach Bedarf zur Laufzeit ändern müssen. Wir haben die Dateien mit dem obigen Beispiel in Form von Code vorbereitet, den du direkt in Java ausführen kannst. Lade den Java Strategy Code hier herunter. Wenn du einen Job suchst und Java-Programmierer bist, informiere dich über unsere Sozialleistungen und reagiere auf unsere aktuellen Stellenangebote.