Декоратер (пројектни узорак)
Декоратер је објектно-оријентисани пројектни узорак. Сврха декоратера је динамичко додавање одговорности(функционалности) неком објекту. Проширивање одговорности(функционалности) наслеђивањем је непрактично због експоненцијалног пораста броја класа у хијерархији, па се узорак декоратер намеће као решење таквог проблема.[1]
Учесници
Компонента
Представља интерфејс за објекте који се декоришу(допуњују).
Субјекат
Класа објеката који се декоришу(допуњују).
Декоратер
Садржи референцу на класу Компонента и наслеђује интерфејс класе Компонента.
Конкретни декоратер
Имплементира методе из интерфејса тако што их декорише(допуњује).[2]
Примери
C++
#include <iostream>
class Komponenta{
public:
virtual void operacija() = 0;
};
class Subjekat : public Komponenta{
public:
void operacija() {
std::cout << "Prikaz obicnog subjekta." << std::endl;
}
};
class Dopuna : public Komponenta{
public:
Dopuna(Komponenta *komp) : komponenta(komp) {}
virtual void operacija() = 0;
protected:
Komponenta *komponenta;
};
class KonkretnaDopuna : public Dopuna{
public:
KonkretnaDopuna(Komponenta *komponenta) : Dopuna(komponenta) {}
void operacija() {
std::cout << "Dodatak za obican subjekat. ";
komponenta->operacija();
}
};
int main() {
Komponenta *k1 = new Subjekat();
Komponenta *k2 = new Subjekat();
std::cout << "<----- stanje pre dopune ----->" << std::endl;
k1->operacija();
k2->operacija();
Dopuna *d1 = new KonkretnaDopuna(k1);
std::cout << "\n<----- stanje nakon dopune ----->" << std::endl;
d1->operacija();
k2->operacija();
return 0;
}
Референце
- ^ ЕТФ Декоратер„Архивирана копија” (PDF). стр. 2,3,4,5 и 6. Архивирано из оригинала (PDF) 22. 04. 2017. г. Приступљено 21. април 2017.
- ^ Декоратер-учесници„Архивирана копија” (PDF). стр. 7. Архивирано из оригинала (PDF) 22. 04. 2017. г. Приступљено 21. април 2017.