Wzorzec projektowy Strategy w Java

Wzorzec projektowy Strategy jest jednym z behawioralnych wzorców projektowych, który umożliwia definiowanie rodziny algorytmów, umieszczenie ich w oddzielnych klasach, i sprawia, że są one wymienne. Wzorzec ten pozwala zmieniać algorytm wykonywania zadania w trakcie działania aplikacji bez zmiany klasy, która tego zadania używa. Jest to szczególnie użyteczne, gdy mamy wiele podobnych klas, które różnią się tylko sposobem wykonania pewnych działań.

Przykład użycia wzorca Strategy

Załóżmy, że tworzymy aplikację do analizy danych. W ramach tej aplikacji chcemy oferować różne strategie analizy, np. analizę statystyczną i analizę predykcyjną. Użyjemy wzorca Strategy, aby umożliwić użytkownikowi wybór strategii analizy danych.

Interfejs Strategy

Najpierw zdefiniujemy interfejs AnalysisStrategy, który będzie reprezentował naszą strategię analizy danych.

// Interfejs strategii analizy danych
public interface AnalysisStrategy {
    void analyzeData(String data);
}
Konkretne strategie

Następnie zdefiniujemy dwie konkretne strategie, które implementują nasz interfejs AnalysisStrategy: StatisticalAnalysis i PredictiveAnalysis.

// Strategia analizy statystycznej
public class StatisticalAnalysis implements AnalysisStrategy {
    @Override
    public void analyzeData(String data) {
        System.out.println("Analizowanie danych statystycznie: " + data);
    }
}

// Strategia analizy predykcyjnej
public class PredictiveAnalysis implements AnalysisStrategy {
    @Override
    public void analyzeData(String data) {
        System.out.println("Analizowanie danych predykcyjnie: " + data);
    }
}
Kontekst

Teraz potrzebujemy klasy kontekstu, która będzie używać AnalysisStrategy. Klasa DataAnalyzer pozwoli na zmianę strategii analizy w trakcie działania programu

// Klasa kontekstu używająca strategii
public class DataAnalyzer {
    private AnalysisStrategy strategy;

    public DataAnalyzer(AnalysisStrategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(AnalysisStrategy strategy) {
        this.strategy = strategy;
    }

    public void analyze(String data) {
        strategy.analyzeData(data);
    }
}
Demonstracja użycia wzorca Strategy

W końcu zobaczymy, jak można używać naszego wzorca Strategy w praktyce.

public class StrategyDemo {
    public static void main(String[] args) {
        String data = "Dane do analizy";
        DataAnalyzer analyzer = 
              new DataAnalyzer(new StatisticalAnalysis());
        
        // Analiza statystyczna
        analyzer.analyze(data);
        
        // Zmiana strategii na analizę predykcyjną
        analyzer.setStrategy(new PredictiveAnalysis());
        
        // Analiza predykcyjna
        analyzer.analyze(data);
    }
}

Podsumowanie

Wzorzec projektowy Strategy pozwala na elastyczne zmienianie algorytmów wykonujących określone zadania w aplikacji, bez konieczności modyfikacji kodu, który te algorytmy wykorzystuje. Dzięki temu kod staje się bardziej modularny, łatwiejszy w utrzymaniu i rozszerzaniu. W naszym przykładzie zastosowaliśmy wzorzec Strategy do zmiany strategii analizy danych, demonstrując jego użyteczność w praktycznym zastosowaniu.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top