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

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

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