1

我一直在四处寻找,但找不到太多相关信息,但是从一个界面交叉转换到另一个界面会被认为是糟糕的设计吗?这是我正在使用的代码示例:

class IShip {
  // strictly ship_like interface
  // i.e. move, attack, dock, etc.
};

class Sim_object {
  // all game objects are derived from this and represents component in composite pattern
  // get_name()
  // get_location()
  // add
  // remove
  // etc.
};

template<typename T>
class Group : public Sim_object {
  // composite functions
  // add
  // remove
  // display
  // map<T> container;
};

class Ship_group : public Group<IShip>, public IShip {
  // added IShip functionality
};

class Ship : public Sim_object, public IShip {
  // actual ship object
};

无论如何,我正在使用 MVC,我的控制器将在其中操纵 IShip 对象,并根据它们是复合对象还是叶子对象,将执行一些功能。我的问题是有时我需要从 IShip 转到 Sim_object 以获得不同的界面(需要 dynamic_cast)。这会被认为是糟糕的设计/实践吗?我真的不想为了访问 Sim_object 命令而污染 IShip 界面。

4

1 回答 1

0

转换通常意味着糟糕的设计,除非在该上下文中已经知道转换的类型。例如,如果您有一个接口 IRenderer,它绘制由接口 ITexture 表示的纹理,并且您有一个具有 OpenGLRenderer 和 OpenGLTexture 的 OpenGL 实现,那么在 OpenGLRenderer 中将 ITexture 转换为 OpenGLTexture 不会是设计问题。

如果您确实需要将 IShip 转换为 Sim_object,那么认为 IShip 实际上应该是 Sim_object 是合理的。

于 2012-06-13T19:13:13.523 回答