Ensure a class only has one instance, and provide a global point of access to it.
- Need exactly one instance of a class and a well-known access point
- Need to have the sole instance extensible by subclassing
- Need controlled access
- Reduce name space
- Permits refinement of operations and representation
- More flexible than static class operators