假设我们有一个经典的多态架构:
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
并包含特定于呈现的代码。