Апстрактна фабрика (пројектни узорак)

Апстрактна фабрика је објектно-оријентисани пројектни узорак. Сврха апстрактне фабрике је да пружи заједнички интерфејс за групу сличних објекта, без прављења конкретних класа. Клијент "не види" конкретне класе производа, већ га интересује само конкретан резултат. [1]

УчеснициУреди

Апстрактна фабрикаУреди

Садржи чисте виртуелне функције(методе) за креирање свих конкретних производа.

Конкретна фабрикаУреди

Наслеђује апстрактну фабрику(интерфејс) и имплементира методе за креирање конкретних производа. Могу да постоје више различитих конкретних фабрика.

Апстрактни производУреди

Декларише интерфејс за одређени тип производа.

Конкретни производУреди

Наслеђује и имплементира интерфејс апстрактног производа и дефинише производ који ће бити креиран помоћу одговарајуће фабрике. [2]

ПримериУреди

C++Уреди

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

РеференцеУреди

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