Apstraktna fabrika (projektni uzorak)

S Vikipedije, slobodne enciklopedije

Apstraktna fabrika je objektno-orijentisani projektni uzorak. Svrha apstraktne fabrike je da pruži zajednički interfejs za grupu sličnih objekta, bez pravljenja konkretnih klasa. Klijent "ne vidi" konkretne klase proizvoda, već ga interesuje samo konkretan rezultat.[1]

Učesnici[uredi | uredi izvor]

Apstraktna fabrika[uredi | uredi izvor]

Sadrži čiste virtuelne funkcije(metode) za kreiranje svih konkretnih proizvoda.

Konkretna fabrika[uredi | uredi izvor]

Nasleđuje apstraktnu fabriku(interfejs) i implementira metode za kreiranje konkretnih proizvoda. Mogu da postoje više različitih konkretnih fabrika.

Apstraktni proizvod[uredi | uredi izvor]

Deklariše interfejs za određeni tip proizvoda.

Konkretni proizvod[uredi | uredi izvor]

Nasleđuje i implementira interfejs apstraktnog proizvoda i definiše proizvod koji će biti kreiran pomoću odgovarajuće fabrike. [2]

Primeri[uredi | uredi izvor]

C++[uredi | uredi izvor]

#include <iostream>

class ApstraktniProizvod{
public:
    virtual void use() = 0;
};

class KonkretniProizvodA : public ApstraktniProizvod{
public:
    void use() {
        std::cout << "Koristim KonkretniProizvodA." << std::endl;
    }
};

class KonkretniProizvodB : public ApstraktniProizvod{
public:
    void use() {
        std::cout << "Koristrim KonkretniProizvodB." << std::endl;
    }
};

class ApstraktnaFabrika{
public:
    virtual ApstraktniProizvod* getProizvod() = 0;
};

class KonkretnaFabrikaA : public ApstraktnaFabrika{
public:
    ApstraktniProizvod* getProizvod() {
        return new KonkretniProizvodA;
    }
};

class KonkretnaFabrikaB : public ApstraktnaFabrika{
public:
    ApstraktniProizvod* getProizvod() {
        return new KonkretniProizvodB;
    }
};

int main() {
    ApstraktnaFabrika* fa = new KonkretnaFabrikaA();
    ApstraktnaFabrika* fb = new KonkretnaFabrikaB();

    ApstraktniProizvod* pa = fa->getProizvod();
    ApstraktniProizvod* pb = fb->getProizvod();

    pa->use();
    pb->use();

return 0;
}

Reference[uredi | uredi izvor]

  1. ^ ETF Apstraktna fabrika (PDF). str. 2,3,5 i 6 http://rti.etf.bg.ac.rs/rti/ir4ps/predavanja/Projektni%20uzorci/16%20Apstraktna%20fabrika.pdf. Pristupljeno 21. april 2017.  Nedostaje ili je prazan parametar |title= (pomoć)
  2. ^ Apstraktna fabrika-učesnici (PDF). str. 7 i 8 http://rti.etf.bg.ac.rs/rti/ir4ps/predavanja/Projektni%20uzorci/16%20Apstraktna%20fabrika.pdf. Pristupljeno 21. april 2017.  Nedostaje ili je prazan parametar |title= (pomoć)