Декоратер (пројектни узорак)

Из Википедије, слободне енциклопедије
Иди на навигацију Иди на претрагу

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

Референце[уреди]

  1. ^ ЕТФ Декоратер (PDF). стр. 2,3,4,5 и 6 http://rti.etf.bg.ac.rs/rti/ir4ps/predavanja/Projektni%20uzorci/07%20Dekorater.pdf. Приступљено 21. април 2017.  Недостаје или је празан параметар |title= (помоћ)
  2. ^ Декоратер-учесници (PDF). стр. 7 http://rti.etf.bg.ac.rs/rti/ir4ps/predavanja/Projektni%20uzorci/07%20Dekorater.pdf. Приступљено 21. април 2017.  Недостаје или је празан параметар |title= (помоћ)