2010-12-13 62 views
3

J'ai une classe Java qui fait quelque chose comme çaJava: préférez la classe utilitaire en fonction d'une instance de classe ou de méthodes statiques?

public class MyObjectUtil { 

    private final MyObject myObject; 

    public MyObjectUtil (MyObject myObject){    
     this.myObject = myObject;  
    } 

    public boolean isSomeInfoPresentValid() { 
     return myObject.isSomething(); 
    } 

    public void modifyMyObjectInSomeWay(String blah) { 
     myObject.modify(blah); 
    } 

} 

Chaque fois que j'instancier ma classe utilitaire pour interagir avec une instance spécifique de MyObject.

myObject est présent en tant que session obj

MyObjectUtil myObjUtil = new MyObjectUtil(myObject); 
myObjUtil.modifyMyObjectInSomeWay("blah"); 
boolean valid = myObjUtil.isSomeInfoPresentValid(); 

Pour obtenir le même résultat que je pouvais avoir des fonctions statiques qui font les mêmes opérations en utilisant myObject chaque fois comme méthode param.

public class MyObjectUtil { 

    public static boolean isSomeInfoPresentValid(MyObject myObject) { 
     return myObject.isSomething(); 
    } 

    public static void modifyMyObjectInSomeWay(MyObject myObject, String blah) { 
     myObject.modify(blah); 
    } 

} 

Je ne sais pas où je devrais aller.
J'utilise la classe Util dans mes contrôleurs et parfois j'ai besoin d'appeler quelques méthodes contre la même instance de myObject, donc pour moi la première solution semble la plus correcte. En même temps, comme j'ai beaucoup de requêtes contre mes contrôleurs, je peux finir par créer beaucoup d'instances MyObjectUtil à chaque fois que myObject est lié à une requête http spécifique.

De quel côté dois-je aller dans mon cas et comment dois-je choisir dans d'autres cas? MonObjet est utilisé de manière spécifique par certaines classes d'utilitaires comme MyObjectXXXUtil MyObjectYYYUtil. Je voudrais maintenir ces méthodes Util (qui modifient myObject et vérifier l'état spécifique) hors de l'implémentation spécifique de MyObject, car elles ne sont pas spécifiques à cela. De nombreuses fonctions Util peuvent interagir avec MyObject d'une certaine manière.

Répondre

7

Si les méthodes de MyObjectUtil dépendent complètement de MyObject, je les placerais simplement dans MyObject. Une classe utilitaire est utile lorsque vous avez beaucoup de classes qui peuvent utiliser les méthodes.

+0

Je suis d'accord avec cela merci. MyObject est utilisé de manière spécifique par certaines classes Utilities comme MyObjectXXXUtil MyObjectYYYUtil. Je voudrais maintenir ces méthodes Util (qui modifient myObject et vérifier l'état spécifique) hors de l'implémentation MyObject spécifique, car elles ne sont pas spécifiques à cela. De nombreuses fonctions Util peuvent interagir avec MyObject d'une certaine manière. – spike07

+0

que se passe-t-il si l'utilitaire est pour un objet java natif comme TimeZone? Que ferais-je dans ce cas? Est-ce que je créer une classe appelée TimeZoneUtils ou devrais-je créer une classe qui étend TimeZone? –