我一直在搜索,但是找不到很多东西,但是从一个接口到另一个接口的交叉广播会被认为是不良设计吗?这是我正在使用的代码示例:

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接口。

最佳答案

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

如果确实需要将IShip强制转换为Sim_object,则可以合理地认为IShip实际上应该是Sim_object。

10-06 01:30