← Back to Home
Singleton Pattern
Ensure a class has only one instance and provide a global access point.
What is it?
The Singleton pattern ensures there is only one instance of a class throughout the app, and provides a global point of access to that instance.
Interactive Demo: Singleton vs Regular Class
Click the buttons below to see the difference between Singleton and regular class instantiation:
🔒 Singleton Pattern
Instances Created:0
🔓 Regular Class
Instances Created:0
💡 Notice the Difference:
- • Singleton: Always returns the same instance (same ID, count stays low)
- • Regular Class: Creates new instances every time (different IDs, count increases)
Code Example
class ToastManager {
private static instance: ToastManager;
private constructor() {} // Private constructor prevents direct instantiation
static getInstance(): ToastManager {
if (!ToastManager.instance) {
ToastManager.instance = new ToastManager();
}
return ToastManager.instance; // Always returns the same instance
}
show(message: string) {
toast.success(message);
}
}
// Usage - both variables point to the same instance
const toast1 = ToastManager.getInstance();
const toast2 = ToastManager.getInstance();
console.log(toast1 === toast2); // trueCommon Uses
- Global toast manager
- Application-wide theme or settings service
- Redux store or centralized event bus
- Database connection pools
- Logging services
When to Use
- Need exactly one instance of a class
- Shared global state or utilities
- Expensive object creation that should be done once
- Coordinating actions across the system
Caution
- Overuse can lead to tightly coupled code
- Harder to test if used improperly
- Can create hidden dependencies
- Violates Single Responsibility Principle if it does too much
Beginning