2013-09-05 17 views
14

Un singleton in Java dovrebbe utilizzare variabili statiche o variabili membro? Ci sono dei vantaggi per entrambi?Un singleton Java dovrebbe utilizzare variabili statiche?

+0

Vedere: http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern –

+0

Si sarebbe in grado di creare un singleton senza utilizzare almeno una variabile statica. – dasblinkenlight

+0

@dasblinkenlight Sì, ne avrei bisogno, ma la domanda riguarda tutte le altre variabili che potrebbero essere variabili di membri o variabili statiche. – Andreas

risposta

11

È necessario utilizzare le variabili membro. Un singleton è un oggetto (cioè un'istanza di una classe) e quindi dovrebbe essere modellato come tale; anche se hai sempre intenzione di crearne uno.

Le statistiche devono essere utilizzate per le variabili di livello di classe.

+0

Le variabili membro sono i genitori di variabili statiche http://www.programmerinterview.com/index.php/c-cplusplus/whats-the-difference-between-a-class-variable-and-an-instance-variable/ – SpringLearner

4

È possibile evitare l'uso di variabili statiche e utilizzare Enum invece:

public enum MySingleton { 
    INSTANCE; 
} 

È possibile accedere a questa Singleton come MySingleton.INSTANCE.

Enum è thread-safe e l'implementazione di Singleton tramite Enum garantisce che il singleton abbia una sola istanza anche in un ambiente con multithreading.

2

Non è necessario utilizzare variabili statiche o variabili membro. Poiché singleton avrà una sola istanza in modo logico, l'uso della variabile statica o membro non fa alcuna differenza. Oltre a ciò, le differenze statiche e delle variabili di istanza vengono mantenute, le variabili statiche verranno inizializzate durante il caricamento della classe, ma le variabili di istanza verranno inizializzate durante la creazione dell'istanza.

Tuttavia, come regola generale di programmazione, è necessario decidere se è necessaria una variabile statica o meno. Non creare semplicemente variabili statiche pubbliche e finire con problemi inutili. Quindi, secondo la mia opinione personale, le variabili di istanza dovrebbero essere preferite per mantenere le cose semplici e in controllo.

2

La sua non è obbligatorio l'uso statico variables.You può usare anche enum

vedere this

+0

Since un enum è per definizione statico, semplicemente non mostra che usa variabili statiche. Altrimenti un enum è una bella implementazione per un singleton – Xtroce

2

Dipende variabili di calcestruzzo. Sicuramente l'uso più comune è che Singleton è un oggetto normale che contiene le variabili membro. Ad esempio, puoi facilmente sostituire un oggetto con un altro (con tutte le altre proprietà).

Ogni classe può avere variabili statiche ma non si deseleziona se è singleton o no.

Lo schema di singleton nella sua natura riguarda l'istanza dell'oggetto. La statica è lo strumento delle classi -> nessuna relazione con il modello singleton.

1

Un sacco di informazioni sono già state fornite: utilizzare variabili statiche o una variabile statica che punta all'istanza o utilizzare un enum.

Una grande differenza è quando il tuo singolo tonnellata è un membro di una classe che è una sottoclasse di un'altra classe.

Quindi l'istanza singleton eredita dalla super classe.

Questo può avere un enorme vantaggio.

Le enumerazioni non possono estendersi a vicenda, ma è possibile utilizzare un enum che implementa interfacce.

5

È necessario un riferimento statico all'istanza singleton, ma l'istanza stessa deve utilizzare variabili di istanza, proprio come una normale classe.

Il motivo è che l'istanza Singleton è dopotutto un oggetto, quindi i soliti buoni principi di progettazione si applicano ancora alla sua classe.

Inoltre, oggi è un singleton, ma domani potrebbe essere un ThreadLocal o non avere alcun tipo di restrizioni per la creazione di istanze. Il cambiamento tra queste scelte architettoniche è molto basso se la classe è progettata nel solito modo. Se si utilizzano campi statici, tali modifiche richiederebbero più interventi di manutenzione per rendere i campi non statici.

+0

Perché variabili di istanza? – Andreas

+0

@Andreas visualizza le modifiche per rispondere del motivo – Bohemian

Problemi correlati