【发布时间】:2016-09-01 08:28:32
【问题描述】:
我正在使用实体基础组件系统。
我有很多类型的stationary objects,例如
- 墙=块
- 火炮塔 = 方块 + 射手
- 水炮台 = 方块 + 射手
- 地堡 = 方块 + 刷怪箱
这里是stationary objects的工厂:-
class StationaryObject{
enum typeOfObject_enum{WALL,FIRE_TURRET, ....};
Entity* create(typeOfObject_enum theType){ //it is enum
switch(theType){
case WALL: ... create some mesh, some physic body ....
case FIRE_TURRET: .... create some mesh, some physic body+ unique logic 20 lines ....
....
}
}
}
效果很好。
问题:
现在我要创建100种Stationary objects,应该存放在哪里?
将它们全部存储在类StationaryObject会使类太大(?)。
请注意,每种类型的对象都有微小但独特的逻辑。
【问题讨论】:
-
我强烈建议您切换到最新的 c++ 标准。使用
enum class而不是enum,返回std::unique_ptr<Entity>而不是Entity* -
为什么还需要工厂?
-
为什么它比
std::make_unique<WallType>更好?我个人认为工厂真的解决不了问题,它来自于 Java 的邪恶之地。在不知不觉中,你的代码被数百个工厂、构建器、抽象类和其他邪恶的、不必要的垃圾炸毁了。 -
"WallType 不是 C++ 意义上的类型,它是游戏对象的类型。"好吧,听起来它也应该是 C++ 类型。在这里,我解决了你的问题
-
@DavidHaim 我同意你的观点,在这种情况下工厂没有意义;但是,说“工厂真的什么都解决不了”也太过分了。工厂让您控制在运行时实例化的实现。工厂允许您放弃在单个类中使用什么实现的所有决策。工厂允许您根据运行时参数连接对象...我可以继续,但您明白了。
标签: c++ design-patterns factory-pattern component-based