In questo Java best practices book di Joshua Bloch, è possibile trovare il motivo per cui è necessario imporre la proprietà Singleton con un costruttore privato o un tipo Enum. Il capitolo è piuttosto lungo, quindi mantenendolo riassunto:
Fare una classe a Singleton può rendere difficile testare i suoi client, in quanto è impossibile sostituire un'implementazione di simulazione per un singleton a meno che non implementi un'interfaccia che funge da suo tipo . approccio positiva è attuare Singoletti semplicemente fare un tipo enum con un elemento:
// Enum singleton - the preferred approach
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
Questo approccio è funzionalmente equivalente al metodo campo pubblico, tranne che è più conciso, fornisce il meccanismo di serializzazione libero, e fornisce una garanzia ironclad contro l'istanziazione multipla, anche a fronte di sofisticati attacchi di serializzazione o riflessione .
Mentre questo approccio deve ancora essere ampiamente adottato , un tipo enum singolo elemento è il modo migliore per attuare un singoletto.
_Chi sta facendo nuova MySingleton() _ La JVM è. –
'INSTANCE' è uguale a' public static final MySingleton INSTANCE = new MySingleton(); '. – Pshemo
ENUM - Un singleton garantito. –