- Ensure that only one instance of a class is created.
- Provide a global point of access to the object.
- Early Instantiation
- Non-Thread Safe, Lazy Instantiation
- Thread Safe, Lazy Instantiation
- Thread Safe, Lazy Instantiation using Double locking
- Thread Safe, Serializable, Lazy Instantiation using Double locking