2016-05-05 12 views
0

Ich arbeite gerade an einer großen Codebasis, und ich mache etwas Refactoring darauf.Ist es eine gute Praxis, die statische Methode in der Singleton-Klasse zu verwenden?

Die Hauptklasse I in gearbeitet ist ein Singletonklasse A, und es gibt einige Methoden, die

beispielsweise auf der statischen Methoden aus der Klasse B. abhängig sind:

public class A{ 

    public static A getInstance() {}; 

    method1() { 
     B.dosomething1(); 
    } 

    method2() { 
     dosomething2(); 
    } 
} 

method1 dann hängt eine statische Methode, während Methode2 nicht ist.

wenn ich method1 verwenden müssen, ist es gute Praxis zu schreiben:

A.getInstance().method1(); 

oder ist es besser method1 als statisch zu deklarieren, und rufen:

A.method1(); 

und für alle anderen nicht-statische Methode, Anruf A.getInstance().method2()?

Danke.

+0

die gute Praxis ist nicht Singletons und Statik überhaupt zu verwenden –

Antwort

1

Ich würde statischen Kontextcode von Instanzkontextcode trennen. In Ihrem speziellen Fall halte ich beide Methoden für statisch.

public class A { 
    public static void method1(){ 
     B.doSomething(); 
    } 
    public static void method2(){ 
     doMoreThings(); 
     //Incorrect: object.doSomething(); 
    } 
} 
+0

Also Sie vorschlagen, er macht 'A' eine * static geschachtelte Klasse * - [Statische Klassen in Java] (http://stackoverflow.com/a/ 7486111/1241334)? - und Ihre Methoden sind nicht statisch. –

+0

Ich denke, eine verschachtelte Klasse würde keinen Sinn ergeben, wenn nur zwei Methoden vom selben Ort zugegriffen werden. Denken Sie darüber nach, ob er "A.method1()" und "A.method2()" von verschiedenen Orten aus verwenden müsste. –

+0

In Java gibt es keine statischen Klassen auf oberster Ebene, sondern nur verschachtelte statische Klassen. Dein Kommentar steht also im Widerspruch zu deiner Antwort. –

1

Sie sollten Singletons nur bei Bedarf verwenden. Das heißt, statische Methoden werden zum Zeitpunkt des Ladens der Klasse in den Speicher geladen und hängen außerdem von B ab. Daher sollten Sie es meiner Meinung nach vermeiden, die Methode statisch zu markieren. Sie sollten Methoden nur dann statisch machen, wenn es notwendig ist, da mit steigender Anzahl der statischen Methoden beim Laden von Klassen eine erhebliche Menge an Speicher statischen Dingen zugewiesen wird.