当前位置 : 主页 > 手机开发 > 其它 >

设计模式 – 关于设计的问题(继承,多态)

来源:互联网 收集:自由互联 发布时间:2021-06-19
我对我正在努力解决的问题有疑问.希望你能忍受我. 想象一下,我有一个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类/接口的实例,特定呈现器扩展/实现.
网友评论