Декоратер је објектно-оријентисани пројектни узорак. Сврха декоратера је динамичко додавање одговорности(функционалности) неком објекту. Проширивање одговорности(функционалности) наслеђивањем је непрактично због експоненцијалног пораста броја класа у хијерархији, па се узорак декоратер намеће као решење таквог проблема.ЕТФ Декоратер
Учесници
Компонента Представља интерфејс за објекте који се декоришу(допуњују).
Субјекат Класа објеката који се декоришу(допуњују).
Декоратер Садржи референцу на класу Компонента и наслеђује интерфејс класе Компонента.
Конкретни декоратер Имплементира методе из интерфејса тако што их декорише(допуњује).Декоратер-учесници
Примери
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; }
Референце
Категорија:Пројектни узорци