Структура. Product - продукт
- определяет интерфейс объектов, создаваемых абстрактным методом;
- реализует интерфейс Product;
- объявляет фабричный метод, который возвращает объект типа Product. Может также содержать реализацию этого метода "по умолчанию"; - может вызывать фабричный метод для создания объекта типа Product;
- переопределяет фабричный метод таким образом, чтобы он создавал и возвращал объект класса ConcreteProduct. Достоинства
Недостатки
Пример
#include<iostream> #include<string> using namespace std;
// Product class Product { public: virtual string getName() = 0; virtual ~Product(){};
// ConcreteProductA class ConcreteProductA: public Product { public: string getName() { return "ConcreteProductA"; } };
// ConcreteProductB class ConcreteProductB: public Product { public: string getName() { return "ConcreteProductB"; } };
// Creator class Creator { public: virtual Product* FactoryMethod() = 0; virtual ~ Creator (){}; };
// ConcreteCreatorA class ConcreteCreatorA: public Creator { public: Product* FactoryMethod() { return new ConcreteProductA(); } };
// ConcreteCreatorB class ConcreteCreatorB: public Creator { public: Product* FactoryMethod() { return new ConcreteProductB(); } };
int main() { const int size = 2; // Создание массива конкретных creators Creator* creators[size]; creators[0] = new ConcreteCreatorA(); creators[1] = new ConcreteCreatorB();
// Для каждого из creators создание своего product for(int i=0; i<size; i++) { Product* product = creators[i]->FactoryMethod(); cout<<product->getName()<<endl; delete product; }
for(int i=0; i<size; i++) delete creators[i]; return 0; }
|