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

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...。

最佳答案

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

07-24 09:44
查看更多