Singleton pattern allows creation of only a single instance from a class
Motivation
Consider a case where your application needs to access a shared resource from different places at various times. And also keep a consistent state between each access.
The Singleton pattern solves this problem by creating a class that is responsible for creating and insuring only a single instance is created, while allowing direct access to the instantiated object.
Applicability
The Singleton pattern can be used in cases where:
- The class have exactly one accessible instance
Structure
Participants
- Singleton: defines an Instance operation that lets clients access its unique instance
Collaborations
- Clients access a Singleton instance only through the
getInstance
method.
Advantages
- Can be sure of the number of instances
- Can globally access instance
Disadvantages
- Violates single responsibility principle. It is responsible for making sure that one instance is being created and also provide the core functionalities of the object itself.
- It is hard to unit test because global states are hard to isolate.
- Causes an object to be globally mutable which may not be desired in some cases.
Implementation
Singletons can be implemented in numerous ways:
- Eager initialization: Object of class is created when it is loaded to the memory
- Lazy initialization: In this method, object is created only if it is needed.
- Thread Safe Singleton: A thread safe singleton in created so that singleton property is maintained even in multi-threaded environment.
Demo
The money received by customers of the cafe is stored in a cash register. It is important that there is only one cash register per cafe, so that the income of the cafe is accurately known.
To solve this problem, we implement CashRegister
as a singleton. we make the constructor private so nobody can instantiate the class. And we implement a method getInstance
to be called by user to obtain instance of the class.
Top comments (0)