【发布时间】:2018-01-15 10:58:34
【问题描述】:
我正在尝试理解抽象工厂模式,这是我的第一个近似值:
#include <iostream>
using namespace std;
class Soldier
{
public:
virtual void shoot()=0;
};
class Archer: public Soldier
{
public:
void shoot(){
cout<<"Archer shoot"<<endl;
}
};
class Rider: public Soldier
{
public:
void shoot(){
cout<<"Rider shoot"<<endl;
}
};
class AbstractFactory
{
public:
virtual Soldier* createArcher()=0;
virtual Soldier* createRider()=0;
};
class OrcFactory: public AbstractFactory
{
Soldier* createArcher()
{
return new Archer();
};
Soldier* createRider()
{
return new Rider();
};
};
class HumanFactory: public AbstractFactory
{
Soldier* createArcher()
{
return new Archer();
};
Soldier* createRider()
{
return new Rider();
};
};
class Game
{
public:
AbstractFactory* factory;
Game(AbstractFactory* factory):factory(factory){};
};
int main()
{
Game* game = new Game(new HumanFactory);
Archer* HumanArcher = static_cast <Archer*>(game->factory->createArcher());
Rider* humanRider = static_cast <Rider*>(game->factory->createRider());
HumanArcher->shoot();
humanRider->shoot();
return 0;
}
这就是我想要重现的内容:
我有编程经验,但我是模式新手,不确定这是否是最佳解决方案,或者即使它是一个好的解决方案。
我正在阅读有关游戏引擎架构的信息,但我陷入了困境,而不是错误,只是怀疑此练习的正确解决方案。这本书有一些基本的例子,但根本不够理解。
【问题讨论】:
-
也许代码审查会是一个更好的地方来问这个问题。
-
如果士兵的属性在兽人和人类之间设置不同会更有意义。
-
@dandan78 我不太确定,这看起来像是假设场景中的练习,代码审查doesn't handle well。这绝对不是生产中使用的代码,它根本没有做任何有用的事情。
-
您可能对wizards and warriors 感兴趣。尽管使用了 C# 示例,但它说明了为什么游戏规则会为 OOP 语言制定糟糕的语言规则。
-
我不认为这是题外话,OP 无法理解和实施特定案例的设计模式,而不是询问他的实施质量,我不认为这是工厂与抽象工厂问题的欺骗......
标签: c++ design-patterns abstract-factory