- Software design patterns ensuring a class has only one instance, and provides a global point of access to that instance
- Used for resources that should only exist once, like a logger or database connection
- static instance and static access method
Cons
- harder to test code due to hidden dependencies and global state
- violates single responsibility principle because it creates the object and manages the lifecycle
- can cause problems in multithreaded environments