Ensure a class only has one instance, and provide a global point of access to it.
Real-world example
There can only be one ivory tower where the wizards study their magic. The same enchanted ivory tower is always used by the wizards. The ivory tower here is a singleton.
In plain words
Ensures that only one object of a particular class is ever created.
Wikipedia says
In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system.
Programmatic Example
Joshua Bloch, Effective Java 2nd Edition p.18
A single-element enum type is the best way to implement a singleton
1public enum EnumIvoryTower {
2 INSTANCE
3}
Then in order to use:
1 var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
2 var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
3 LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
4 LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);
The console output
enumIvoryTower1=com.iluwatar.singleton.EnumIvoryTower@1221555852
enumIvoryTower2=com.iluwatar.singleton.EnumIvoryTower@1221555852
Use the Singleton pattern when
Some typical use cases for the Singleton