我有一项任务,我必须为 Donkey Kong Original 游戏编写 UML 类图。
在游戏中,有一些小的过场动画可以操纵特定的实体(实体的子类)。因此我制作了一个过场动画类来管理它。我的问题是,我不想将我所有的实体子类都包含到 Cutscene 中,因为这对我来说似乎没有必要(它还会使我的 UML 图看起来很乱 :p)。我宁愿让我的过场动画包括我的实体类,然后将我的子实体作为敌人传入以进行检查以查看我正在处理哪个实体,以便我可以适本地操纵它们。 (看起来更干净?)。
但是,我在这里阅读:http://www.cplusplus.com/forum/general/21246/必须以这种方式使用多态性是糟糕的设计。不过,我确实将它用于其他目的。
如果有人能告诉我我是不是傻瓜以及我应该做什么,那将不胜感激!
最佳答案
如果您想检查实体实例的类型,请查看“访问者”模式,它是在 C++ 中进行双重分派(dispatch)的一种解决方案。
class EntityVisitor {
virtual void Visit(const Ladder& ladder) = 0;
virtual void Visit(const Mario& mario) = 0;
...
};
您的“实体”将具有一个接受“访问者”的纯虚函数。
virtual Accept(EntityVisitor& visitor) = 0;
并且每个子类都实现此方法,将 *this 传递给访问者的“访问”函数。
void Mario::Accept(EntityVisitor& v) {
v.Visit(*this); // Calls the 'Mario' overload.
}
关于c++ - 如果按类型比较是糟糕的设计,那么在这种情况下我该怎么办? (多态性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497067/