Disons que nous avons une architecture classique polymorphes:Externaliser rendu des objets polymorphes
class Animal
{
virtual void eat() = 0;
};
class Frog : public Animal
{
virtual void eat() { ... }
};
class Chipmunk : public Animal
{
virtual void eat() { ... }
};
C'est très bien. Mais quand il s'agit de rendu, je pourrais ajouter une méthode virtuelle render
à la classe de base Animal
tout comme la méthode eat
.
Mais les fichiers sources des animaux ont des dépendances avec la bibliothèque particulière utilisée. Cela ne rend pas les choses modulables et maintenables. De plus, leur code de rendu ne les concerne fondamentalement pas.
Quelle est une bonne façon de mettre le code spécifique au rendu hors des classes dérivées? Quand je dis bien, je veux dire sans utiliser quelque chose comme une méthode surchargée qui retourne un nombre différent pour chaque classe dérivée, donc je peux faire un grand si ... sinon si ....
+1 C'est exactement le problème que le modèle de visiteur était destiné à résoudre. –