- Reduced memory footprint
- Single point of access
- Delayed initialization that prevents instantiation until required
- Once instantiated, they're hardly ever "reset"
- Harder to unit test and sometimes introduces hidden dependencies