Здравствуйте, Каюга, Вы писали:
вообще дебилам помогают в спец. учреждениях. Так что думаю заголовок жестковат.
К>Может у кого нибудь лабы по паттернам завалялись, курсовая какая нибудь... не жадничайте =)
Первое что пришло в голову.
#include <iostream>
using namespace std;
struct IProduct
{
virtual void printName()=0;
virtual ~IProduct(){}
};
struct IFactory
{
virtual IProduct* newProduct()=0;
virtual ~IFactory(){}
};
struct ConcreteProduct1: public IProduct
{
void printName()
{
cout<<"Product 1";
}
};
struct ConcreteProduct2: public IProduct
{
void printName()
{
cout<<"Product 2";
}
};
struct ConcreteFactory1:public IFactory
{
IProduct* newProduct()
{
return new ConcreteProduct1;
}
};
struct ConcreteFactory2:public IFactory
{
IProduct* newProduct()
{
return new ConcreteProduct2;
}
};
void printProduct(IFactory* factory)
{
// Какой конкретный продукт создасться зависит от конкретной фабрики.
// В этом вся и фишка. Вынесли создание из printProduct, абстрагировавшись
// от конкретных родуктов и фабрик - работаем только с IFactory и IProduct
// Что позволяет расширять ассортимент продуктов, не меняя этой функции. ВотЪ.
// От просто виртуальных функций отличается тем что надо именно создавать продукт.
// Подробнее читать ГоФ и гугль.
IProduct* product = factory->newProduct();
product->printName();
cout<<"\n";
delete product;
}
int
main()
{
ConcreteFactory1 f1;
ConcreteFactory2 f2;
printProduct(&f1);
printProduct(&f2);
}
К>Заранее премного благодарен.
ох уж мне эти лентяи, которым GoF читать лень