Wzorzec projektowy metoda szablonowa - template method

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

Opis wzorca projektowego metoda szablonowa

Wzorzec projektowy metoda szablonowa należy do wzorców czynnościowych. Jego celem jest ukrycie za jednym interfejsem (klasą abstrakcyjną) różnych wersji obsługi danego zadania. Zasadniczo ten wzorzec stosuje się wszędzie tam, gdzie używa się interfejsów.

Przykładowy diagram UML wzorca projektowego metoda szablonowa

Na poniższym diagramie UML klasy NumericList i AlphabeticList dziedziczą po jednym i tym samym interfejsie iNumericList. Celem tychże klas jest dostarczenie odpowiednich metod do wyświetlania listy numerowanej. Pierwsza klasa do numeracji używa liczb arabskich, zaś druga małych liter alfabetu. Dzięki wspólnemu interfejsowi klasy NumericList i AlphabeticList mogą być łatwo przechowywane w jednej tablicy interfejsów.

Przykładowy diagram UML dla wzorca projektowego metoda szablonowa
Rys. 1
Przykładowy diagram UML dla wzorca projektowego metoda szablonowa

Przykładowa implementacja wzorca projektowego metoda szablonowa

Listing 1
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. class iNumericList{
  5. protected:
  6. std::vector<std::string> textList;
  7. public:
  8. void addListElement(std::string listElement){
  9. textList.push_back(listElement);
  10. }
  11. virtual void write() const = 0;
  12. virtual ~iNumericList(){}
  13. };
  14. class NumericList : public iNumericList{
  15. public:
  16. virtual void write() const {
  17. for(int i = 0; i < textList.size(); i++){
  18. std::cout << i + 1 << ") " << textList[i] << std::endl;
  19. }
  20. }
  21. };
  22. class AlphabeticList : public iNumericList{
  23. public:
  24. virtual void write() const {
  25. for(int i = 0; i < textList.size(); i++){
  26. std::cout << char(i + 97) << ") " << textList[i] << std::endl;
  27. }
  28. }
  29. };
  30. int main(){
  31. iNumericList* numeric = new NumericList;
  32. numeric->addListElement("First position");
  33. numeric->addListElement("Second position");
  34. iNumericList* alphabetic = new AlphabeticList;
  35. alphabetic->addListElement("First position");
  36. alphabetic->addListElement("Secodn position");
  37. std::cout << "Numeric list:" << std::endl << std::endl;
  38. numeric->write();
  39. std::cout << std::endl << "Alphabetic list:" << std::endl << std::endl;
  40. alphabetic->write();
  41. std::cin.get();
  42. return 0;
  43. }

Wynik działania powyższego kodu:

Numeric list:

1) First position
2) Second position

Alphabetic list:

a) First position
b) Secodn position
Strony powiązane
strony powiązane
  1. sourcemaking.com/design_patterns/template_method - strona opisująca wzorzec projektowy metoda szablonowa [En]
  2. pl.wikipedia.org - opis tego wzorca na stronie Wikipedii

Komentarze