Re: Помогите дебилу...
От: dotidot Россия  
Дата: 08.01.07 04:23
Оценка:
Здравствуйте, Каюга, Вы писали:

вообще дебилам помогают в спец. учреждениях. Так что думаю заголовок жестковат.

К>Может у кого нибудь лабы по паттернам завалялись, курсовая какая нибудь... не жадничайте =)

Первое что пришло в голову.
#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 читать лень
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.