Un singleton in Java dovrebbe utilizzare variabili statiche o variabili membro? Ci sono dei vantaggi per entrambi?Un singleton Java dovrebbe utilizzare variabili statiche?
risposta
È 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.
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
È 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.
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.
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.
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.
È 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.
- 1. Aggiornamenti variabili statiche Java
- 2. Best Practice: variabili statiche non finali Java
- 3. classi singleton/statiche per servizi
- 4. Variabili statiche Java e ereditarietà e memoria
- 5. Le variabili java enum sono statiche?
- 6. aggiornare le variabili statiche in Java
- 7. Utilizzo di variabili statiche in Android
- 8. Pattern singleton: il binding anticipato (con variabili statiche coinvolte) diminuisce la necessità di lock mutex?
- 9. Variabili statiche in C#
- 10. Ha senso utilizzare variabili statiche nella funzione principale in C?
- 11. Accesso alle variabili statiche
- 12. Variabili statiche in R
- 13. Variabili statiche di inizializzazione Quiz
- 14. Come utilizzare le variabili statiche in modo efficiente?
- 15. variabili statiche thread-safe senza mutexing?
- 16. Perché qualcuno dovrebbe utilizzare Collections.emptyList in java?
- 17. Stringhe Java: prestazioni statiche private vs variabili locali
- 18. Perché la classe Singleton dovrebbe essere sigillata?
- 19. G ++ ottiene l'ordine di distruzione di variabili statiche errate
- 20. È possibile utilizzare troppe variabili statiche causare una perdita di memoria in Java?
- 21. java: l'accesso a variabili statiche all'interno statico blocco
- 22. DotNet: variabili statiche nella DLL
- 23. Variabili e filettature statiche (C)
- 24. variabili statiche PHP tra virgolette
- 25. Iniezione framework java dependency Play - quando utilizzare i singleton
- 26. strano comportamento delle variabili statiche
- 27. Hibernate EntityManager, dovrebbe essere usato come un singleton?
- 28. java Singleton esemplificazione
- 29. Servizio Android ucciso e variabili statiche
- 30. Spazio dei nomi e variabili statiche C++
Vedere: http://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern –
Si sarebbe in grado di creare un singleton senza utilizzare almeno una variabile statica. – dasblinkenlight
@dasblinkenlight Sì, ne avrei bisogno, ma la domanda riguarda tutte le altre variabili che potrebbero essere variabili di membri o variabili statiche. – Andreas