2010-12-13 14 views
3

Ich habe eine Java-Klasse, die so etwas wie diesesJava: Präferenzklasse abhängig von einer Klasseninstanz oder statischen Methoden?

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); 
    } 

} 

jedes Mal, wenn ich habe tut meine Utility-Klasse zu instanziiert mit einer bestimmten Instanz von MyObject zu interagieren.

myObject liegt als Session obj

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

das gleiche Ergebnis zu erreichen, ich statische Funktionen haben könnte, die die gleichen Operationen myObject jedes Mal, als Methode param tun verwenden.

public class MyObjectUtil { 

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

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

} 

Ich weiß nicht, welchen Weg ich gehen sollte.
Ich benutze die Util-Klasse in meinen Controllern und manchmal muss ich einige Methoden gegen die gleiche myObject-Instanz aufrufen, so scheint mir die erste Lösung die korrektere. Zur gleichen Zeit, da ich viele Anfragen gegen meine Controller habe, kann ich am Ende immer viele MyObjectUtil-Instanzen erstellen, da myObject mit einer bestimmten http-Anfrage in Verbindung steht.

Welchen Weg soll ich in meinem Fall gehen und wie sollte ich in anderen Fällen wählen?

MyObject wird auf bestimmte Arten von Utilities-Klassen wie MyObjectXXXUtil MyObjectYYYUtil verwendet. Ich möchte diese Util-Methoden (die meinObject ändern und den spezifischen Status überprüfen) aus der spezifischen MyObject-Implementierung heraushalten, da sie nicht spezifisch dafür sind. Viele Util-Funktionen können in gewisser Weise mit MyObject interagieren.

Antwort

7

Wenn die Methoden in MyObjectUtil vollständig von MyObject abhängig sind, würde ich sie einfach in MyObject setzen. Eine Dienstprogrammklasse ist nützlich, wenn Sie viele Klassen haben, die die Methoden verwenden können.

+0

Ich stimme dem zu Dank. MyObject wird auf bestimmte Arten von Utilities-Klassen wie MyObjectXXXUtil MyObjectYYYUtil verwendet. Ich möchte diese Util-Methoden (die meinObject ändern und den spezifischen Status überprüfen) aus der spezifischen MyObject-Implementierung heraushalten, da sie nicht spezifisch dafür sind. Viele Util-Funktionen können in gewisser Weise mit MyObject interagieren. – spike07

+0

Was ist, wenn das Util für ein natives Java-Objekt wie TimeZone ist? Was würde ich in diesem Fall tun? Würde ich eine Klasse namens TimeZoneUtils erstellen oder sollte ich eine Klasse erstellen, die TimeZone erweitert? –