C++ 为工厂创建抽象工厂有意义吗?
我在谷歌上搜索这个模式,发现我们可以为C++ 为工厂创建抽象工厂有意义吗?,c++,design-patterns,factory,abstract-factory,C++,Design Patterns,Factory,Abstract Factory,我在谷歌上搜索这个模式,发现我们可以为抽象工厂创建工厂,这真的很有意义。对我来说,下面的例子是从一些C++书籍中得出的。p> 假设我们在一个游戏应用程序中有两个抽象类:Monster和SuperMonster 根据困难程度,我们也有他们的实施: sillymonester,MediumMonster和hardmonester等等 现在我们可以用相同的基类创建三个对象工厂: class AbstractEnemyFactory { public: virtual Soldier* Make
抽象工厂创建工厂
,这真的很有意义。对我来说,下面的例子是从一些C++书籍中得出的。p>
假设我们在一个游戏应用程序中有两个抽象类:Monster
和SuperMonster
根据困难程度,我们也有他们的实施:
sillymonester
,MediumMonster
和hardmonester
等等
现在我们可以用相同的基类创建三个对象工厂:
class AbstractEnemyFactory
{
public:
virtual Soldier* MakeSoldier() = 0;
virtual Monster* MakeMonster() = 0;
virtual SuperMonster* MakeSuperMonster() = 0;
};
class EasyLevelEnemyFactory : public AbstractEnemyFactory
{
public:
Monster* MakeMonster()
{
return new SillyMonster;
}
SuperMonster* MakeSuperMonster()
{
return new SillySuperMonster;
}
};
//The other two factories
在我看来,如果我们创建AbstractEnemyFactoryFactory
,它将根据玩家在运行时选择的级别创建一个合适的AbstractEnemyFactory
实现,这是很自然的
问题:将对象工厂
封装为抽象工厂
有意义吗
我的意思是我们创建一个抽象工厂
,它本身将创建对象分解
s,而不是创建具体对象的具体对象。我找不到多少合理的例子…如果您使用AbstractEnemyFactory
创建AbstractEnemyFactory
,那么您将再次陷入“谁将负责创建合适的AbstractEnemyFactory
”的问题中?然后您可能会尝试创建另一个AbstractEnemyFactoryFactoryFactory
等等
拥有一个AbstractFactory模式意味着,在应用程序的某个地方,您将需要一种开关(通常由GUI输入驱动),当玩家在您的案例中选择游戏难度时,该开关将创建适当的具体工厂
我想说的是,在AbstractFactoryFactory中加入ObjectFactory通常不是错误的,但这应该在ObjectFactory不是唯一要创建的情况下进行(例如,如果玩家选择硬模式或简单模式,您可能有一个树工厂,它将以不同的方式创建具体的树)。在这种情况下,AbstractFactoryFactory将处理多个对象工厂的创建,它可能很有用
但是,如果EnemyFactory的创建是由高级模块(GUI)直接控制的,那么只需简单地创建EasyLevel EnemyFactory
或HardLevel EnemyFactory
编辑:
澄清:以树和敌人为例,MediumGameFactory
创建MediumEnemyFactory
工厂和MediumTreeFactory
,而EasyGameFactory
创建EasyEnemyFactory
。这样,在应用程序的顶部,您只需根据游戏难度创建MediumGameFactory
或EasyGameFactory
,这两个工厂将处理其余的所有工作。因此,您不必在整个应用程序中手动创建所有较小的工厂。您为什么害怕这种解决方案?我认为,从OO范式的角度来看,这是完全可以接受的…谢谢你的回答,但你的例子与树不是很清楚,我。你的意思是说我们有,比如说,MediumGameFactory
,EasyGameFactory
等等,它们反过来可能会封装MediumEnemyFactory
——抽象工厂,TreeFactory
——对象工厂?