17 – Wzorzec czynnościowy – Strategia (strategy pattern) #DSP2017

Witaj,
W poprzednich wpisach opisywałam niektóre wzorce projektowe a konkretnie wzorce projektowe - Adapter i Kompozyt oraz wzorzec czynnościowy - Polecenie.
Dzisiaj przedstawię jeden ze wzorców czynnościowych -Strategia (strategy pattern)

Strategia (strategy) -> definiuje rodzinę wymiennych algorytmów i kapsułkuje je w postaci klas (command pattern).

We wzorcu Strategia definiujemy wspólny interfejs dla wszystkich algorytmów które obsługujemy i zawierające wszystkie dozwolone operacje. Implementujemy go w poszczególnych klasach które dostarczają konkretne algorytmy. We wzorcu również wyróżniamy klienta który korzysta z algorytmów. Posiada on referencję do aktualnie używanej strategii oraz metodę ustawStrategie(), która pozwala ją zmienić.

Elementy:

  • Strategia — interfejs definiujący operacje, które muszą obsługiwać wszystkie dostępne algorytmy.
  • Konkretna strategia — implementuje określony algorytm zgodnie ze zdefiniowanym interfejsem.
  • Klient — użytkownik rodziny algorytmów posiadający referencję do obiektu Strategia.

Obiekty Klient oraz Strategia współpracują ze sobą w celu wykonania określonego zadania. Klient wykonuje wszystkie ogólne zadania i nadzoruje przepływ sterowania, zaś strategie implementują te części zadania, które można wymieniać.

 

Zalety:

  • wzorzec pozwala na formalne zdefiniowanie rozszerzalnych rodzin algorytmów dzięki wprowadzeniu interfejsu Strategia,
  • bazuje na koncepcji kompozycji — algorytm może być wymieniany w trakcie działania programu,
  • eliminacja instrukcji warunkowych,
  • umożliwia wybór implementacji — algorytmy mogą rozwiązywać ten sam problem, lecz różnić się uzyskiwanymi korzyściami (zużycie pamięci, złożoność obliczeniowa, optymalizacja pod kątem pewnych szczególnych przypadków).
  • możliwość niezależnego testowania klientów i strategii

Wady:

  • dodatkowy koszt komunikacji między klientem a strategią (wywołania metod, przekazywanie danych),
  • zwiększenie liczby obiektów.

Zastosowania

  • Wewnętrzna implementacja mechanizmu odśmiecania pamięci która oferuje kilka algorytmów różniących się właściwościami.
  • W sytuacji, gdy poszczególne strategie rozwiązują inny problem - np sklep internetowy który posiada oddziały w kilku krajach różniących się obowiązującymi w nich przepisami podatkowymi. Klient operację naliczenia podatku deleguje do strategii zaimplementowanej dla konkretnego kraju.

 

 

Zapraszam do zobaczenia przykładów wzorca strategii oraz opisu tutaj.

 

Zapraszam serdecznie do śledzenia mnie na:
Twitter
Github - piotrowinka2410

Instagram
Snapchat - piotrowinka2410
Fanpage na Facebooku 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *