Problème de conception ?

Problème de conception ? - Java - Programmation

Marsh Posté le 16-10-2009 à 13:23:44    

Hello,
 
Je débute en POO (avec Java donc), et je rencontre le problème suivant :
 
J'ai deux classes T1 et T2, et une classe mère T.
La plupart des méthodes de T1 et T2 sont quasiment identiques à un point près : dans ces méthodes, j'utilise soit un objet de type T1, soit un objet de type T2.
Vu que j'aimerais éviter la redondance de code, j'aimerais bien mettre ces méthodes directement dans ma classe T (qui est abstraite).
 
La seule "solution" que j'ai trouvé pour l'instant est de définir :

Code :
  1. abstract protected T newT();


dans ma classe T
 
Dans T1 je spécifie :

Code :
  1. protected T newT() {
  2.  return new T1();
  3. }


 
et dans T2 :

Code :
  1. protected T newT() {
  2.  return new T2();
  3. }


 
et dans mes méthodes, je fais donc :

Code :
  1. T monobjet = newT();


en résumé, j'ai juste besoin de créer un objet de même type (T1 ou T2) que l'objet courant.
(mon but est aussi d'éviter l'utilisation d'instanceOf)
 
Ma solution me semble être du vrai bricolage assez moche, donc si vous avez des idées/remarques... :)
 
Merci !

Reply

Marsh Posté le 16-10-2009 à 13:23:44   

Reply

Marsh Posté le 16-10-2009 à 13:26:16    

une Factory ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-10-2009 à 21:55:31    

Si tu veux juste créer un objet de même type que la classe courante, tu fais déjà ce qu'il faut. Ce n'est pas du bricolage mais une factory method. Si T1 et T2 ont des constructeurs différents, tu devras de toutes façons avoir un code d'instanciation différent.
 
Tu peux travailler avec la classe T partout dans ton code où cela est possible afin d'éviter la redondance, mais au moment d'instancier quelque chose de concret tu devras de toutes façons mentionner T1 ou T2.

Reply

Marsh Posté le 18-10-2009 à 16:49:57    

Ok, hé bien si c'est une méthode courante, c'est super !
 
Merci !

Reply

Marsh Posté le 18-10-2009 à 17:55:38    

Question à la con :
ça serait pas plus simple de définir une classe T mère dont après les autres heritent ? Après tu appelles juste le constructeur par defaut et elle est belle?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-10-2009 à 23:00:00    

Je crois que c'est ce qu'il fait, il met le code commun dans T et le code spécifique dans T1 et T2. Il voulait savoir si dans T on pouvait mettre une implémentation générique qui appelle le constructeur par défaut de la classe actuellement instanciée, ce qui est possible mais uniquement via réflection. Il vaut donc mieux mettre ces appels dans T1 et T2.

Reply

Marsh Posté le 19-10-2009 à 08:43:42    

Ok ce que je voulais dire était exactement le fait d'avoir une implémentation générique + appel au constructeur de la classe instanciée.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed