我对我正在努力解决的问题有疑问.希望你能忍受我. 想象一下,我有一个Object类,表示物理对象层次结构的基类.后来我继承它来创建一个Object1D,Object2D和Object3D类.这些派生类中的每一个都
想象一下,我有一个Object类,表示物理对象层次结构的基类.后来我继承它来创建一个Object1D,Object2D和Object3D类.这些派生类中的每一个都将具有一些特定的方法和属性.例如,3d对象可能具有下载渲染器要使用的3d模型的功能.
所以我会有这样的事情:
class Object {}; class Object1D : public Object { Point mPos; }; class Object2D : public Object { ... }; class Object3D : public Object { Model mModel; };
现在我有一个名为Renderer的独立类,它只需要一个Object作为参数,然后渲染它:-)
以类似的方式,我想支持不同类型的渲染器.例如,我可以拥有每个对象可以依赖的默认值,然后为某种对象提供其他特定的渲染器:
class Renderer {}; // Default one class Renderer3D : public Renderer {};
这就是我的问题.渲染器类需要将Object作为参数,例如在构造函数中,以便检索渲染对象所需的任何数据.
到现在为止还挺好.但是Renderer3D需要获得一个Object3D参数,以便不仅获得基本属性,还获得3d对象的特定属性.
构造函数看起来像这样:
CRenderer(Object& object); CRenderer3D(Object3D& object);
现在我如何以通用方式指定它?或者更好的是,有没有更好的方法来设计它?
我知道我可以依赖RTTI或类似的但我想尽可能避免这种情况,因为我觉得可能有更好的方法来解决这个问题.
提前致谢!
一种方法是允许Objects通过getRenderer()方法创建自己的渲染器,该方法返回相应类型的渲染器.这是Factory Method模式的一个示例.根据实现语言的功能,getRenderer方法可以是父Object类中的抽象方法,返回父Renderer类/接口的实例,特定呈现器扩展/实现.