Как мы поставляем конкретный объект на завод по производству прототипов?

Библиотека Loki предоставляет предопределенные интерфейсы для построения шаблона AbstractFactory. В частности, меня интересует основанная на прототипах абстрактная фабрика.

Предположим, что у нас есть игровое приложение с абстрактными сущностями:

class Soldier{ };
class Monster{ };
class SuperMonster{ };

и конкретные объекты:

class EasySoldire : public Soldier{ };

class EasyMoster : public Monster{ };

class EasySuperMonster : public SuperMonster{ };

И так далее для Medium а также Hard,

Теперь я хочу создать простейшую фабрику на основе прототипов.

Вот как это реализовано в Loki (Александреску Модер C ++ Design):

template
<
class AbstractFact,
template <class, class> class Creator,
class TList = typename AbstractFact::ProductList
>
class ConcreteFactory;

template <class ConcreteProduct, class Base>
class PrototypeFactoryUnit : public Base
{
typedef typename Base::ProductList BaseProductList;
protected;
typedef typename Base::ProductList TailProductList;
public;
typedef typename Base::ProductList::Head AbstractProduct;
PrototypeFactoryUnit(AbstractProduct* p = 0)
:pPrototype_(p) {}
friend void DoGetPrototype(const PrototypeFactoryUnit& me,
AbstractProduct*& pPrototype)
{
pPrototype = me.pPrototype_;
}

friend void DoSetPrototype(PrototypeFactoryUnit& me,
AbstractProduct* pObj)
{
me.pPrototype_=pObj;
}

template <class U>
void GetPrototype(AbstractProduct*& p)
{
return DoGetPrototype(*this, p);
}

template <class U>
void SetPrototype(U* pObj)
{
DoSetPrototype(*this, pObj);
}

AbstractProduct* DoCreate(Type2Type<AbstractProduct>)
{

assert(pPrototype_);
return pPrototype_->Clone();
}
private:
AbstractProduct* pPrototype_;
};

Таким образом, ConcreteFactory будет выглядеть так:

typedef AbstractFactory
<
TYPELIST_3(Soldier, Monster, SuperMonster)
>
AbstractEnemyFactory;

typedef ConcreteFactory
<
AbstractEnemyFactory,
PrototypeFactoryUnit
>
EnemyFactory;

Теперь мой вопрос: как мы можем определить Easy уровень фабрики из этого бетонного завода?

4

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]