Stronę tą wyświetlono już: 3561 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.
Rys. 1
Przykładowy diagram UML dla wzorca projektowego metoda szablonowa
Przykładowa implementacja wzorca projektowego metoda szablonowa
#include <iostream>
#include <vector>
#include <string>
class iNumericList{
protected:
std::vector<std::string> textList;
public:
void addListElement(std::string listElement){
textList.push_back(listElement);
}
virtual void write() const = 0;
virtual ~iNumericList(){}
};
class NumericList : public iNumericList{
public:
virtual void write() const {
for(int i = 0; i < textList.size(); i++){
std::cout << i + 1 << ") " << textList[i] << std::endl;
}
}
};
class AlphabeticList : public iNumericList{
public:
virtual void write() const {
for(int i = 0; i < textList.size(); i++){
std::cout << char(i + 97) << ") " << textList[i] << std::endl;
}
}
};
int main(){
iNumericList* numeric = new NumericList;
numeric->addListElement("First position");
numeric->addListElement("Second position");
iNumericList* alphabetic = new AlphabeticList;
alphabetic->addListElement("First position");
alphabetic->addListElement("Secodn position");
std::cout << "Numeric list:" << std::endl << std::endl;
numeric->write();
std::cout << std::endl << "Alphabetic list:" << std::endl << std::endl;
alphabetic->write();
std::cin.get();
return 0;
}
Wynik działania powyższego kodu:
Numeric list: 1) First position 2) Second position Alphabetic list: a) First position b) Secodn position