Bonjour.
J'ai besoin de plusieurs classes relativement proches et je me demande dans quelle mesure je pourrais utiliser les génériques pour éviter de répéter N fois la même chose. Je coince un peu sur le sujet.
En détail:
1) J'ai une interface PieceListener, décrivant quelques méthodes du genre:- Une classe PieceEvent pour gérer des événements spécifiques
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void pieceAjoutee(PieceEvent pe); public void pieceChangee(PieceEvent pe); public void pieceSupprimee(PieceEvent pe);
- Une classe BasePiece (abstraite) qui ne s'occupe que de la gestion des Listener et définit les méthodes habituelles pour les gérer:>>>> Le fonctionnement est des plus simples: j'utilise une EventListenerList dans laquelle j'ajoute (add) ou supprime (remove) les Listener et que je parcours dans la méthode fire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public PieceListener addPieceListener(PieceListener pl) { ... } public PieceListener removePieceListener(PieceListener pl) { ... } protected void firePieceEvent(PieceEvent pe) { ... }
- Une classe Piece qui hérite de BasePiece et qui ne s'occupe que des traitements propres aux objets Piece (je sépare ainsi la gestion des Listener dans la classe BasePiece de celle qui est propre aux objets dans la classe Piece)
La classe qui écoute les événements implémente PieceListener.
2) J'ai une interface ChronoListener, décrivant des méthodes identiques:- Une classe ChronoEvent qsui décrit les événements
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public void chronoDemarre(ChronoEvent ce); public void chronoArrete(ChronoEvent ce);
- Une classe BaseChrono (abstraite) qui s'occupe uniquement de la gestion des Listener, avec:- La classe Chrono héritant de BaseChrono et réalisant les traitements propres aux objets Chrono
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public ChronoListener addChronoListener(ChronoListener cl) { ... } public ChronoListener removeChronoListener(ChronoListener cl) { ... } protected void fireChronoEvent(ChronoEvent ce) { ... }
La classe qui écoute les événement implémente ChronoListener.
3) Même chose avec TrucListener, TrucEvent, BaseTruc, Truc
4) Même chose avec MachinListener, MachinEvent, BaseMachin et Machin.
A votre avis, comment pourrais-je faire fonctionner tout ça de manière plus simple, sans avoir à réécrire la même chose pour Piece, pour Chrono, pour Truc, pour Machin etc. ?
J'avais dans l'idée quelque chose comme une interface Listener<T>, une classe Base<T>, mais j'ai des soucis:
- ça oblige d'avoir défini auparavant les classes T possibles, tout en les faisant hériter de Base<T> et implémenter Listener<T> !
- comment définir génériquement les méthodes addTTTListener, removeTTTListener, fireTTTEvent ?
- comment créer génériquement les classes TTTEvent ?
Merci
Partager