I. Wzorce kreacyjne
1. Singleton
2. Budowniczy
3. Prototyp
4. Fabryka
5. Fabryka abstrakcyjna
II. Wzorce strukturalne
1. Adapter
2. Most
3. Kompozyt
4. Dekorator
5. Fasada
6. Pyłek
7. Pełnomocnik
III. Wzorce czynnościowe
1. Łańcuch zobowiązań
2. Polecenie
3. Interpreter
4. Iterator
5. Mediator
6. Pamiątka
7. Obserwator
8. Stan
9. Strategia
10. Metoda szablonowa
11. Odwiedzający

Strategia (strategy) - wzorzec projektowy (design pattern) - java

1. Cel:
Wzorzec Strategia (strategy) używamy gdy chcemy użyć strategii lub wybrać algorytm
w czasie wykonania (runtime) i chcesz lub widzisz potrzebę wyeliminowania instrukcji
warunkowych w swojej aplikacji. Wzorzec strategii zawiera opcje algorytmu i poszczególne klasy,
które eliminują instrukcje warunkowe w aplikacji.
Wzorzec strategii jest przydatny, gdy istnieje zestaw powiązanych algorytmów,
a obiekt klienta musi mieć możliwość dynamicznego wybierania algorytmu z tego zestawu,
który odpowiada jego bieżącym potrzebom.
2. Problem:
Chcemy mieć różne algorytmu w aplikacji, chcemy wyeliminować if else do uzyskiwania stragegii, algorytmu aplikacji.
Block if else wraz z rozrastaniem aplikacji jest trudny w utrzymaniu, chcemy uprościć złożoność klasy.

3. Rozwiązanie:
Wzorzec stan jest implementowany jako interface lub klasa abstrakcyjna.
Reprezentowana jest przez klasę per każdy algorytm, strategia.
Zamiast przechodzić przez różne przypadki emiminujemy if else block, raz zaimplementując wzorzec
który jest uzewnętrzniony do każdego warunku będący klasą algorytmu, strategii.
Klient ma informacje o danej strategii ale strategie nie mają nawzajem o sobie informacji.

4. Diagram klas wzorca Strategia (strategy):


5. Implementacja:
Klasa testująca:
  1. public class StrategyTest {
  2. public static void main(String[] args) {
  3. int[] numbers = {5,1,6,2,3};
  4. Context context = new Context(new BubbleSort());
  5. context.execute(numbers);
  6. context = new Context(new QuictSort());
  7. context.execute(numbers);
  8. }
  9. }
Klasa Context, obsługująca wzorzec strategii:
  1. public class Context {
  2. private Strategy strategy;
  3.  
  4. public Context(Strategy strategy) {
  5. this.strategy = strategy;
  6. }
  7.  
  8. public void execute(int[] numbers) {
  9. strategy.sort(numbers);
  10. }
  11. }
implementacja interface-u i stragegii (algorytmu):
  1. public interface Strategy {
  2. void sort(int[] numbers);
  3. }
  4.  
  5. public class BubbleSort implements Strategy {
  6. @Override
  7. public void sort(int[] numbers) {
  8. System.out.println("Sortowanie bąbelkowe");
  9. }
  10. }
  11.  
  12. public class QuictSort implements Strategy {
  13. @Override
  14. public void sort(int[] numbers) {
  15. System.out.println("Sortowanie quicksort");
  16. }
  17. }
Wynik programu to:
Sortowanie bąbelkowe
Sortowanie quicksort

6. Zastosowanie w kodzie java:
- java.util.Comparator#compare()
- javax.servlet.http.HttpServlet
- javax.servlet.Filter#doFilter()
created by cv.java.org.pl © 2023 All Rights Reserved.