Voici un petit pb de conception qui n'est pas forcément spécifique à C++.
Je manipule plusieurs classes appelée WidgetX par l'intermédiare d'une interface IWidget dont elles dérivent :
Jusque ici rien de bien méchant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class Widget1 : public IWidget {...} class Widget2 : public IWidget {...} class Widget3 : public IWidget {...} ...
Mais voila, supposons que la classe Widget3 ait besoin d'une méthode publique spécifique, par exemple : getSpecific() que les autres Widget1 et Widget2 n'implémentent pas.
Du coup, dans ce cas, quelle est la meilleure facon de procéder ?
- J'imagine que le down casting IWidget -> Widget3 n'est pas fameux.
- Ou bien, on pourrait écrire une méthode getSpecific() pour toutes les classes dérivées Widgetx et que l'on mettrait virtuelle pure dans IWidget mais qui ne ferait rien pour Widget1 et Widget2
- Ou alors, on pourrait écrire :
class Widget3 : public IWidget, SpecificWidget {...} et cross caster de IWidget vers SpecificWidget qui aurait la methode virtuelle pure getSpecific() mais ca parait lourd.
- Enfin, je pourrais utiliser le pattern strategy, ie par exemple fournir un objet specifique du style SpecificWidgetBehavior dans le constructeur de Widget3, mais ensuite, comment acceder à cet objet à partir de l'interface IWidget car celle ci n'aurait pas l'utilité d'implémenter une méthode du style getBehavior() car WIdget1 et Widget2 n'en ont pas besoin ?
Bref, je suis presque sur que tout le monde est plus ou moins confronte à cette situation, alors je suis sur que vos idées seront meilleurs que les miennes car je tourne un peu en rond ...
Merci d'avance pour vos suggestions.






Répondre avec citation








Partager