Singleton

creational

Ensures a class has only one instance and provides a global point of access to it.

Intent

The Singleton pattern ensures that a class has only one instance throughout the application lifecycle and provides a global access point to that instance.

Motivation

Some classes should have exactly one instance. For example, a configuration manager, a connection pool, or a logging service. The Singleton pattern provides a way to ensure that only one instance of such classes exists and provides a global access point to it.

Structure

The Singleton class declares a static method getInstance() that returns the same instance of its own class. The Singleton's constructor is made private to prevent direct construction calls with the new operator.

Participants

  • •Singleton - declares a static getInstance() method that returns the unique instance
  • •Client - accesses the Singleton instance through the getInstance() method

Pros

  • ✓Controlled access to the sole instance
  • ✓Reduced namespace pollution
  • ✓Permits refinement of operations and representation
  • ✓Lazy initialization is possible

Cons

  • ✗Difficult to test due to global state
  • ✗Violates Single Responsibility Principle
  • ✗Can mask bad design
  • ✗Requires special treatment in multithreaded environment

Use Cases

Configuration management
Connection pooling
Logging services
Cache management
Thread pools
Device drivers

Implementation Tips

Considerations

  • •Ensure thread safety in concurrent environments
  • •Consider lazy vs eager initialization
  • •Be careful with serialization/deserialization
  • •Watch out for reflection attacks

Tips

  • •Use private constructor to prevent instantiation
  • •Store the instance in a private static field
  • •Provide a public static method to get the instance
  • •Consider using modules for singleton behavior in modern JavaScript/TypeScript

Interactive Code Editor