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

С Википедије, слободне енциклопедије

Апстрактна фабрика је објектно-оријентисани пројектни узорак. Сврха апстрактне фабрике је да пружи заједнички интерфејс за групу сличних објекта, без прављења конкретних класа. Клијент "не види" конкретне класе производа, већ га интересује само конкретан резултат. [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= (помоћ)