2016-07-11 24 views
-2

sah ich einige Stück Code wieStatische oder neue Instanz für jedes Objekt?

public class A { 

public void doSomething(B b) { 
    b.addSometing("queue1", getDefault()); 
    b.addSometing("queue2", getDefault()); 
    b.addSometing("queue3", getDefault()); 
} 

private C getDefault() { 
    C c = new C(); 
    c.setAutoCreate(true); 
    c.setExired(false); 
    c.setDelay(3500); 

    return c; 
}} 

sieht, wenn wir C c var setzen. (das ist Standard für alle Objekte der Klasse A) für jedes Objekt der Klasse A, verwenden wir nur eine Menge Speicher für große Objekte der Klasse A, vielleicht besser zu machen C c statisch? Wir erstellen nur eine Instanz der Klasse C für die gesamte Klasse und verwenden sie für jedes Objekt der Klasse A. Wenn wir dies tun, nach diesem Code wird wie wie

public class A { 
private static C c = new C(); 

static { 
    c.setAutoCreate(true); 
    c.setExired(false); 
    c.setDelay(3500); 
} 

public void doSomething(B b) { 
    b.addSometing("queue1", c); 
    b.addSometing("queue2", c); 
    b.addSometing("queue3", c); 
} 

}

ich denke, es besserer Weg, vielleicht bin ich falsch. Bitte geben Sie mir Ratschläge.

+0

Der letzte Passt nicht so viel Sinn für mich, wenn Sie die gleiche Instanz von 'C' auf einer Karte für verschiedene Schlüssel hinzufügen, warum mit einem 'Map' gehen betrachten in der erste Platz, wenn Sie nur einen Wert für mehrere Schlüssel haben? – SomeJavaGuy

+3

_Wenn Sie eine statische Instanz als Standard verwenden, sollte sie _immutable_ sein, sonst könnten Sie Nebenwirkungen bekommen. 'setAutocreate (true)' usw. sieht jedoch nicht unveränderlich aus. – Thomas

+0

Wenn Sie das Objekt c in 'queue1' ändern, ändern sich auch die Objekte in 'queue2' und 'queue3'. Wenn dies akzeptabel ist, dann scheinen Ihre statischen Lösungen in Ordnung zu sein. – Jeet

Antwort

2

Die Antwort auf diese Frage hängt von der Logik der Anwendung ab und/oder was A mit der C-Instanz tun soll. Wenn nur einmal die Instanz eines bestimmten Objekts benötigt wird, würde ich vorschlagen, das Singleton-Muster in Java https://en.wikipedia.org/wiki/Singleton_pattern zu verwenden. Wenn jedoch eine Instanz der Klasse A ihr C-Mitglied ändert, wäre es eine schlechte Idee, den oben genannten Ansatz zu verwenden, da Sie durch die Änderung des C-Mitglieds auf einem A-Objekt die Berechnung stören könnten erledigt mit oder auf einem anderen A-Objekt.

Wenn das C-Mitglied Konfigurationsoptionen oder Daten enthält, die von allen Objekten verwendet werden (wie im obigen Beispiel dargestellt) und daher nicht geändert werden können, können Sie das Singleton-Muster verwenden, um es für alle A zugänglich zu machen Instanzen - Meiner Meinung nach ist das in Ordnung.

Best, Julian

Verwandte Themen