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