Singleton Pattern The Singleton Pattern is one of the commonly used design templates when there needs to be a control on how an object can be created. This design pattern proposes that at any time there can only be one instance of a singleton (object) created by the JVM. The Singleton class�s default constructor is made private, which prevents the direct instantiation of the object by others (Other Classes).
One such scenario where it might prove useful is when we develop the
Java Help Module in a project. JavaHelp is an extensible, platform-independent help system that enables authors and developers to incorporate online help into applications. Since at any time we can do only with one main Help object and use the same object in different screens, Singleton Pattern suits best for its implementation.
Implementing the Singleton Pattern
To implement this design pattern we need to consider the following 4 steps:
Step 1: Provide a default Private constructor
Step 2: Create a Method for getting the reference to the Singleton Object
We write a public static getter or access method to get the instance of the Singleton Object at runtime. First time the object is created inside this method as it is null. Subsequent calls to this method returns the same object created as the object is globally declared (private) and the hence the same referenced object is returned.
Step 3: Make the Access method Synchronized to prevent
Thread Problems.
It could happen that the access method may be called twice from 2 different classes at the same time and hence more than one singleton object being created. This could violate singleton pattern principle. In order to prevent the simultaneous invocation of the getter method by 2 threads or classes simultaneously we add the synchronized keyword to the method declaration
Step 4: Override the Object clone method to prevent cloning.
We can still be able to create a copy of the Object by cloning it using the Object�s clone method. This can be done as shown below
This again violates the Singleton Design Pattern's objective. So to deal with this we need to override the Object�s clone method which throws a CloneNotSupportedException exception.
The below program shows the final Implementation of Singleton Design Pattern in java, by using all the 4 steps mentioned above.
Regards,
Hemanth