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

Учесници

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

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

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

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

Примери

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

Референце 

Пројектни узорци
Чланци са примерима C++ кода