外部化多态对象的渲染

时间:2011-03-02 21:19:45

标签: c++

假设我们有一个经典的多态架构:

class Animal
{
    virtual void eat() = 0;
};

class Frog : public Animal
{
    virtual void eat() { ... }
};

class Chipmunk : public Animal
{
    virtual void eat() { ... }
};

这很好。但是在渲染时,我可以像render方法一样向Animal基类添加虚拟eat方法。

但是动物源文件依赖于正在使用的特定库。这不会使事情可以调节和维护。另外,它们的渲染代码基本上与它们无关。

将渲染特定代码放在派生类之外的有什么好方法?

当我说好的时候,我的意思是没有使用像重载方法那样为每个派生类返回不同的数字,所以我可以做一个大的 if ... else if ... 。< / p>

3 个答案:

答案 0 :(得分:3)

查看Visitor Pattern - 虚拟render()函数传递Visitor的实例,然后调用Visitor.renderMe(this)。然后,访问者根据需要重载renderMe并包含特定于呈现的代码。

答案 1 :(得分:1)

或查看Bridge Pattern

动物类可以有一个Render方法,但是不是将渲染方法实现到特定的API,而是将它们写入抽象渲染API。然后,您提供渲染API的一个或多个具体实现。现在,动物渲染与特定渲染技术分离,双方都依赖于中性的抽象API。

答案 2 :(得分:0)

依赖注入。

  

http://en.wikipedia.org/wiki/Dependency_injection

您可以提供通用

Animal>>render() 

渲染器通过参数,然后在

Animal>>render(Renderer r) 

致电:

r.render(this).