• 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