Wzorzec projektowy strategia - strategy

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3500 razy

Opis wzorca projektowego strategia

Wzorzec projektowy strategia należy do wzorców czynnościowych. Jego implementacja umożliwia wybranie klasy dziedziczącej po danym interfejsie, która to odpowiada za sposób realizacji zadania lub zadań tegoż obiektu. Wszystkie klasy dziedziczące realizują to samo zadanie ale w odmienny sposób.

Przykład diagramu UML wzorca projektowego strategia

Na poniższym diagramie UML interfejs iNumeric jest dziedziczony przez klasy Numeric i Alphabetic, które odpowiedzialne są za wypisanie listy numerowanej. Klasa Numeric używa jako numeracji cyfr arabskich natomiast klasa Alphabetic liter alfabetu łacińskiego. Klasa główna NumericList zawiera pole list, które przechowuje dodane dane tekstowe listy numerowanej. Klasa ta agreguje również interfejs iNumeric w polu system. Pole to jest ustawiane wewnątrz metody setSystem.

Diagram UML wzorca projektowego strategia
Rys. 1
Przykładowy diagram UML dla wzorca projektowego strategia

Przykładowa implementacja wzorca projektowego strategia

#include <iostream> #include <vector> #include <string> class iNumeric{ public: virtual void write(const std::vector<std::string> &list) = 0; }; class Numeric : public iNumeric { virtual void write(const std::vector<std::string> &list) { for(int i = 0; i < list.size(); i++){ std::cout << (i + 1) << ") " << list[i] << std::endl; } } }; class Alphabetic : public iNumeric { virtual void write(const std::vector<std::string> &list) { for(int i = 0; i < list.size(); i++){ std::cout << char(i + 97) << ") " << list[i] << std::endl; } } }; class NumericList{ public: enum list_type{ numeric, alphabetic }; protected: std::vector<std::string> list; iNumeric* system; public: NumericList() : system(NULL) {} void setSystem(list_type listType){ if(system) delete system; switch((int)listType){ case list_type::numeric: system = new Numeric; break; case list_type::alphabetic: system = new Alphabetic; break; } } void write(){ if(system){ system->write(list); } } NumericList& operator +=(const std::string &text){ list.push_back(text); return *this; } }; int main(){ NumericList numericlist; numericlist += "Some text line one"; numericlist += "Some text line two"; numericlist.setSystem(NumericList::list_type::numeric); numericlist.write(); numericlist.setSystem(NumericList::list_type::alphabetic); numericlist.write(); std::cin.get(); return 0; }

Wynik działania powyższego kodu:

1) Some text line one
2) Some text line two
a) Some text line one
b) Some text line two
Strony powiązane
strony powiązane
  1. sourcemaking.com/design_patterns/observer - strona opisująca wzorzec projektowy stan [En]
  2. pl.wikipedia.org - opis tego wzorca na stronie Wikipedii
Propozycje książek
tytuł: C++. Projektowanie oprogramowania. Zasady i wzorce projektowe autor: Klaus Iglberger

Tytuł:

C++. Projektowanie oprogramowania. Zasady i wzorce projektowe

Autor:

Klaus Iglberger

tytuł: Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II autor: Eric Freeman, Elisabeth Robson

Tytuł:

Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II

Autor:

Eric Freeman, Elisabeth Robson

tytuł: React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III autor: Carlos Santana Roldán

Tytuł:

React 17. Wzorce projektowe i najlepsze praktyki. Projektowanie i rozwijanie nowoczesnych aplikacji internetowych. Wydanie III

Autor:

Carlos Santana Roldán

tytuł: Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II autor: Eric Freeman, Elisabeth Robson

Tytuł:

Wzorce projektowe. Rusz głową! Tworzenie rozszerzalnego i łatwego w utrzymaniu oprogramowania obiektowego. Wydanie II

Autor:

Eric Freeman, Elisabeth Robson

tytuł: Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET Core 3. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku autor: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Tytuł:

Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku

Autor:

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

tytuł: Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III autor: Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

Tytuł:

Projektowanie interfejsów., Sprawdzone wzorce projektowe. Wydanie III

Autor:

Jenifer Tidwell, Charles Brewer, Aynne Valencia-Brooks

tytuł: Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych autor: Bilgin Ibryam,  Roland Huß

Tytuł:

Kubernetes. Wzorce projektowe. Komponenty wielokrotnego użycia do projektowania natywnych aplikacji chmurowych

Autor:

Bilgin Ibryam, Roland Huß

tytuł: Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F# autor: Dmitri Nesteruk

Tytuł:

Wzorce projektowe w .NET. Projektowanie zorientowane obiektowo z wykorzystaniem C# i F#

Autor:

Dmitri Nesteruk

tytuł: Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II autor: Alan Shalloway, James R. Trott

Tytuł:

Programowanie zorientowane obiektowo. Wzorce projektowe. Wydanie II

Autor:

Alan Shalloway, James R. Trott

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona