public enum Singleton {
INSTANCE;
public void execute (String arg) {
// Perform operation here
}
}
Enums have private constructors, are final and provide proper serialization machinery. They are also very concise and lazily initialized in a thread safe manner.
The JVM provides a guarantee that enum values will not be instantiated more than once each, which gives the enum singleton pattern a very strong defense against reflection attacks.
What the enum pattern doesn't protect against is other developers physically adding more elements to the source code. Consequently, if you choose this implementation style for your singletons it is imperative that you very clearly document that no new values should be added to those enums.
This is the recommended way of implementing the singleton pattern, as explained by Joshua Bloch in Effective Java.