2010-12-10 40 views
2

Je crée un petit projet qui va manipuler certains composants internes du projet (grand).Java design/implementation question

Maintenant, chaque composant fait quelque chose à sa manière, mais c'est fondamentalement la même chose. Par exemple: Chaque composant peut supprimer les fichiers temporaires stockés à l'intérieur. Mais chaque fichier temporaire est d'un type différent, comme dans le composant 1, les fichiers temporaires sont type Object1 et dans un autre composant Objectx etc.

Donc je pense à créer une classe appelée Manager, qui contiendra des méthodes comme delete inside, et ComponManager étend la classe Manager et fournit l'implémentation des méthodes à l'intérieur.

Dois-je faire un résumé du gestionnaire? Petit problème, disons que le gestionnaire a ces deux méthodes. Le composant 1 utilisera la première suppression et un autre composant utilisera une autre suppression.

public void delete(Object1 obj){ 
} 

public void delete(Objectx obj){ 
} 

Ou devrais-je les mettre en œuvre séparément tous ensemble sans avoir à étendre la même classe?

Quelle serait une bonne façon de mettre en œuvre cela? merci

+0

Je pense qu'il ne faut pas oublier que l'utilisation de méthodes surchargées avec le même numéro de paramètre n'est pas la meilleure pratique: http://www.javapractices.com/topic/TopicAction.do?Id= 119 – PeterMmm

Répondre

4

je pense que vous devez créer une interface avec la méthode supprimable

public void delete() 

et vos objets Object1, ..., ObjectX devrait la mettre en œuvre. Votre gestionnaire pourrait avoir la méthode:

public void delete(Deleteable obj) { 
    obj.delete(); 
} 
1

Je ne suis pas sûr si vous vouliez dire de cette façon que je vous ai compris. E.g. Component1 a obtenu seulement les fichiers Object1 tandis que Component2 a obtenu les fichiers Object2 onyl?

Je ne suis pas sûr de votre solution, si vous vouliez dire comme je pensais, qu'en est-il des génériques?

interface Component<T extends YourObjectsAncestor> { 
    void delete(T t); 
} 

class Component1 implements Component<Object1> { 
    public void delete(Object1 t) { 
    } 
} 

class Component2 implements Component<Object2> { 
    public void delete(Object2 t) { 
    } 
} 

Notez que cette approche ne sera utile que si chaque composant doit être lié à un concnrete « fichier » (comme vous l'avez nommé). par exemple. Component1 n'a que des fichiers de type Object1 et ainsi de suite ..