0Pricing
Java Academy · Lektion

Strategy-Pattern: Austauschbare Algorithmen

Kapseln Sie Sortier- oder Zahlungsalgorithmen hinter einer Strategy-Schnittstelle, um sie zur Laufzeit auszutauschen.

Strategy-Pattern: Austauschbare Algorithmen ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Zweck des Strategy-Musters

Das Strategy-Muster definiert eine Familie von Algorithmen, kapselt jeden einzelnen und macht sie austauschbar. Dadurch kann der Algorithmus unabhängig vom Kontext, der ihn verwendet, verändert werden.

Das Problem ohne das Strategy-Muster

Ohne das Strategy-Muster ist die Auswahl des Algorithmus in if-else-Ketten verborgen. Das Hinzufügen eines neuen Algorithmus bedeutet, die Kontextklasse zu bearbeiten – ein Verstoß gegen das Open-Closed-Prinzip.

public double sort(List<Integer> data, String method) {
    if (method.equals("bubble")) { /* bubble sort */ }
    else if (method.equals("merge")) { /* merge sort */ }
    // adding quicksort requires editing this class
}

Strategy-Schnittstelle

Definieren Sie ein @FunctionalInterface oder eine reguläre Schnittstelle, die den Vertrag des Algorithmus darstellt. Jede Implementierung kapselt einen anderen Algorithmus.

public interface SortStrategy {
    void sort(List<Integer> data);
}
public class BubbleSortStrategy implements SortStrategy {
    public void sort(List<Integer> data) { /* bubble sort logic */ }
}
public class QuickSortStrategy implements SortStrategy {
    public void sort(List<Integer> data) { Collections.sort(data); }
}

Kontextklasse

Der Kontext enthält eine Referenz auf eine Strategie und delegiert die Ausführung des Algorithmus an sie. Die Strategie kann zur Laufzeit ausgetauscht werden.

public class Sorter {
    private SortStrategy strategy;
    public Sorter(SortStrategy strategy) { this.strategy = strategy; }
    public void setStrategy(SortStrategy s) { this.strategy = s; }
    public void sort(List<Integer> data)   { strategy.sort(data); }
}

Strategien zur Laufzeit wechseln

Ändern Sie die Strategie im laufenden Betrieb, ohne den Kontext zu verändern. Dadurch lässt sich das Verhalten von außerhalb der Klasse konfigurieren.

Sorter sorter = new Sorter(new BubbleSortStrategy());
sorter.sort(data);                          // uses bubble sort
sorter.setStrategy(new QuickSortStrategy());
sorter.sort(data);                          // now uses quick sort

Lambda-Strategien

Wenn die Strategieschnittstelle ein @FunctionalInterface ist, können Sie direkt Lambdas verwenden – für einfache Strategien sind keine expliziten Klassen erforderlich.

Sorter sorter = new Sorter(data -> Collections.sort(data)); // lambda strategy
// or method reference:
Sorter sorter2 = new Sorter(Collections::sort);

Strategy für die Zahlungsabwicklung

Ein klassischer Anwendungsfall aus der Praxis: Ein Zahlungskontext akzeptiert verschiedene Zahlungsstrategien (Kreditkarte, PayPal, Krypto), ohne deren jeweilige Details zu kennen.

public interface PaymentStrategy {
    void pay(double amount);
}
new PaymentProcessor(new CreditCardStrategy("4111...")).pay(99.99);
new PaymentProcessor(new PayPalStrategy("user@email.com")).pay(99.99);

Strategy für die Komprimierung

Ein Dateiverarbeiter kann eine CompressionStrategy verwenden. Binden Sie GZIP, ZIP oder LZ4 ein, ohne die Pipeline zur Dateiverarbeitung zu ändern.

public interface CompressionStrategy {
    byte[] compress(byte[] data) throws IOException;
}
public class GzipStrategy implements CompressionStrategy {
    public byte[] compress(byte[] data) throws IOException { /* gzip */ return new byte[0]; }
}

Strategy mit einer Factory kombinieren

Verwenden Sie eine Factory, um die Strategie anhand der Konfiguration auszuwählen. So bleibt die Auswahllogik sowohl vom Kontext als auch von den Strategien selbst getrennt.

SortStrategy strategy = switch (config.getSortMethod()) {
    case "bubble" -> new BubbleSortStrategy();
    case "merge"  -> new MergeSortStrategy();
    default       -> Collections::sort;
};
new Sorter(strategy).sort(data);

Strategy im Vergleich zur Template Method

Die Template Method verwendet Vererbung: Das Grundgerüst befindet sich in der Basisklasse, und Unterklassen überschreiben einzelne Schritte. Strategy verwendet Komposition: Der Algorithmus befindet sich vollständig außerhalb. Bevorzugen Sie Strategy, wenn Sie mehr Flexibilität benötigen.

Strategy im JDK

Comparator ist die kanonische JDK-Implementierung des Strategy-Musters. Übergeben Sie verschiedene Comparatoren an Collections.sort, um den Sortieralgorithmus zu ändern, ohne den Collection-Code anzupassen.

List<String> names = List.of("Bob", "Alice", "Charlie");
names.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);

Strategien testen

Strategien lassen sich einfach isoliert testen – rufen Sie in einem Unit-Test einfach strategy.sort(data) auf. Injizieren Sie Mock-Strategien in den Kontext, um dessen Orchestrierungslogik zu testen.

Kurzer Test

Was ist der wesentliche strukturelle Unterschied zwischen Strategy und Template Method?

Zusammenfassung

Strategy kapselt austauschbare Algorithmen hinter einer gemeinsamen Schnittstelle. Verwenden Sie Lambdas für einfache Strategien und Klassen für komplexe. Kombinieren Sie das Muster mit Factories, wenn die Auswahl konfigurationsgesteuert erfolgen soll.

Häufig gestellte Fragen

Ist die Lektion „Strategy-Pattern: Austauschbare Algorithmen“ kostenlos?

Ja — der vollständige Text von „Strategy-Pattern: Austauschbare Algorithmen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Strategy-Pattern: Austauschbare Algorithmen“?

Kapseln Sie Sortier- oder Zahlungsalgorithmen hinter einer Strategy-Schnittstelle, um sie zur Laufzeit auszutauschen. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Strategy-Pattern: Austauschbare Algorithmen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Observer-Pattern: Ereignisbenachrichtigung
  2. Strategy-Pattern: Austauschbare Algorithmen
  3. Command-Pattern: Aktionen kapseln
  4. Template Method: Algorithmusgerüste definieren
← Zurück zu Java Academy