Bonjour,
Je cherche à trouver la bonne architecture pour une partie de mon application.
Voilà le problème :
J'ai une classe Piece, donc étendent une classe Vis et une classe Clou.
J'ai une classe Outils, dont étendent une classe Marteau et une classe Tournevis.
Dans la classe Outils, je souhaite définir une méthode utiliserOutil(Piece piece). L'idée est que cette méthode soit redéfinie par les classes filles (Marteau et Tournevis), via un override ou une méthode abstraite.
J'ai ensuite une classe cliente, Atelier, qui possède une méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class Outils{ utiliserOutil(Piece piece); } public class Marteau extends Outils{ @Override utiliserOutil(Piece piece){ ... } } public class Tournevis extends Outils{ @Override utiliserOutil(Piece piece){ ... } }
Avec ce design, j'ai deux problèmes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 faireOperation(Outils outil, Piece piece){ outil.utiliserOutil(piece); }
- Rien n'empêchera plus le marteau d'utiliser la vis, ni le tournevis d'utiliser un clou dans la méthode faireOperation(...).
- Dans la méthode utiliserOutils(Piece piece), je récupère un objet général Piece, et je ne peux plus le traiter spécifiquement comment une Vis ou un Clou.
Je peux bien sûr envisager de faire un test dans chaque méthode via instanceof, puis de caster la Piece en Clou ou en Vis. Mais je cherche s'il n'existe pas un meilleure design.
Avez-vous une idée de design qui puisse répondre à ce cas ?
Je vous remercie par avance !
Partager