When to use:

  1. when a class in your program should have just a single instance available to all clients
  2. when you need stricter control over global variables

How singleton pattern breaks Single Responsibility Principle ?