交叉铸造以获得另一个被认为是糟糕设计的界面?

时间:2012-04-14 01:09:19

标签: c++ inheritance

我一直在寻找但是找不到这个,但是从一个界面到另一个界面的交叉投射被认为是糟糕的设计?以下是我正在使用的代码示例:

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)。这会被认为是糟糕的设计/实践吗?我真的不想污染IShip接口只是为了访问Sim_object命令。

1 个答案:

答案 0 :(得分:0)

施放通常意味着设计不好,除非在该上下文中已知类型。例如,如果你有一个界面IRenderer绘制由界面ITexture表示的纹理,你有一个OpenGL实现,它有一个OpenGLRenderer和一个OpenGLTexture,在OpenGLRenderer中将ITexture转换为OpenGLTexture不会是一个设计问题。

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