Singleton classes comes under "Creational design pattern", Singleton pattern restricts from creating multiple instances of the class,and ensure that only one object should be available in the JVM, there are different ways to implement singleton classes as below :-
Ways to define Singleton classes :-
1. By defining the singleton class object as static final variable, this is known as early initialization of singleton object.
2. Define singleton class object on method call
3. Define Thread safe Singleton Classes :-
We can easily make the above class thread safe by making getInstance() method Synchronized
4. Define Singleton by Double check Locking :-
5. Bill Pugh Singleton classes :-
Implementing singleton classes using static inner classes, static inner helper class wont initialize until getInstance() method gets called.
Happy Coding.. :)
Ways to define Singleton classes :-
1. By defining the singleton class object as static final variable, this is known as early initialization of singleton object.
public class SingletoneClassExample{ Private static final instance = new SingletoneClassExample(); // Define private constructor to avoid other classes from creating instance private SingletoneClassExample(){ } public static SingletoneClassExample getInstance(){ return instance; } }By creating singleton class using above method the class object will be created at class loading itself, so if application is not using this class still the object will be created.
2. Define singleton class object on method call
public class SingletoneClassExample{ Private static final instance = null; // Define private constructor to avoid other classes from creating instance private SingletoneClassExample(){ } public static SingletoneClassExample getInstance(){ instance = new SingletoneClassExample(); return instance; } }This is the simple way to create singleton object on demand, but it is safe only in case of single threaded applications, in case of multiple threads calls this method there may be chances to create multiple objects of singleton class.
3. Define Thread safe Singleton Classes :-
We can easily make the above class thread safe by making getInstance() method Synchronized
public class SingletoneClassExample{ Private static final instance = null; // Define private constructor to avoid other classes from creating instance private SingletoneClassExample(){ } public static synchronized SingletoneClassExample getInstance(){ instance = new SingletoneClassExample(); return instance; } }Above solution works fine for thread safety but it reduces the performance because of global synchronized method which will be called always while all method calls though synchronization is needed only for first few cases.
4. Define Singleton by Double check Locking :-
public class SingletoneClassExample{ Private static final instance = null; // Define private constructor to avoid other classes from creating instance private SingletoneClassExample(){ } // global method to get singleton obj public static SingletoneClassExample getInstance(){ if(instance == null){ synchornized(SingletoneClassExample.class){ // use synchronized only if instance is null if(instance == null){ instance = new SingletoneClassExample(); } } } return instance; } }
5. Bill Pugh Singleton classes :-
Implementing singleton classes using static inner classes, static inner helper class wont initialize until getInstance() method gets called.
public class SingletoneClassExample{ // Define private constructor to avoid other classes from creating instance private SingletoneClassExample(){ } private static class SingletoneClassHelper{ Private static final instance = new SingletoneClassExample(); // loading of class will be synchronized here.. } public static SingletoneClassExample getInstance(){ return SingletoneClassHelper.instance ; }No synchronization required in this case so there will not be any performance issues, easy to use and understand..
Happy Coding.. :)
Comments
Post a Comment