Декоратер (пројектни узорак)
Декоратер је објектно-оријентисани пројектни узорак. Сврха декоратера је динамичко додавање одговорности(функционалности) неком објекту. Проширивање одговорности(функционалности) наслеђивањем је непрактично због експоненцијалног пораста броја класа у хијерархији, па се узорак декоратер намеће као решење таквог проблема.

Учесници

Компонента 
Представља интерфејс за објекте који се декоришу(допуњују).

Субјекат 
Класа објеката који се декоришу(допуњују).

Декоратер 
Садржи референцу на класу Компонента и наслеђује интерфејс класе Компонента.

Конкретни декоратер 
Имплементира методе из интерфејса тако што их декорише(допуњује).

Примери

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;
}

Референце 

Пројектни узорци
Декоратер је објектно-оријентисани пројектни узорак . Сврха декоратера је динамичко додавање одговорности( функционалности ) неком објекту . Проширивање одговорности( функционалности ) наслеђивањем је непрактично због експоненцијалног пораста броја класа у хијерархији , па се узорак декоратер намеће као решење таквог проблема . Учесници Компонента Представља интерфејс за објекте који се декоришу( допуњују ) . Субјекат Класа објеката који се декоришу( допуњују ) . Декоратер Садржи референцу на класу Компонента и наслеђује интерфејс класе Компонента . Конкретни декоратер Имплементира методе из интерфејса тако што их декорише( допуњује ) . Примери C++ #include <iostream> class Komponenta { public : virtual void operacija ( ) = } ; 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 ( ) = 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 } Референце Пројектни узорци