Contents [hide]
What is Singleton Design Pattern?
Singleton is a design pattern that ensures that a class can only have one object.
Singleton Class Using Eager Initialization Method
package com.hareeshsoni.singletonexample;
/**
* @author HAREESH
*
*/
public class SingletonExample {
// Instance will be created at load time
private static SingletonExample singletonExample = new SingletonExample();
// Creating private constructor
private SingletonExample() {
}
// Declaring static method
public static SingletonExample getInstance() {
return singletonExample;
}
}
Test above SingletonExample here.
package com.hareeshsoni.singletonexample;
/**
* @author HAREESH
*
*/
public class Main {
public static void main(String[] args) {
SingletonExample singletonExampleObject1 = SingletonExample.getInstance();
SingletonExample singletonExampleObject2 = SingletonExample.getInstance();
SingletonExample singletonExampleObject3 = SingletonExample.getInstance();
// We will check here above created objects are equal or not
if (singletonExampleObject1 == singletonExampleObject2 && singletonExampleObject2 == singletonExampleObject3) {
System.out.println("Objects are same.");
} else {
System.out.println("Objects are different.");
}
}
}
Singleton Class Using Lagy Initialization Method
package com.hareeshsoni.singletonexample;
/**
* @author HAREESH
*
*/
public class SingletonUsingLazyInitialization {
// Declaring Static variable reference
private static SingletonUsingLazyInitialization singletonUsingLazyInitialization = null;
// Creating private constructor
private SingletonUsingLazyInitialization() {
}
// Declaring static method
public static SingletonUsingLazyInitialization getInstance() {
if(singletonUsingLazyInitialization == null) {
return singletonUsingLazyInitialization = new SingletonUsingLazyInitialization();
}
return singletonUsingLazyInitialization;
}
}
Test above Singleton Using Lazy Initialization Example here.
package com.hareeshsoni.singletonexample;
/**
* @author HAREESH
*
*/
public class SingletonUsingLazyInitializationMain {
public static void main(String[] args) {
SingletonUsingLazyInitialization object1 = SingletonUsingLazyInitialization.getInstance();
SingletonUsingLazyInitialization object2 = SingletonUsingLazyInitialization.getInstance();
SingletonUsingLazyInitialization object3 = SingletonUsingLazyInitialization.getInstance();
// We will check here above created objects are equal or not
if (object1 == object2 && object2 == object3) {
System.out.println("Objects are same.");
} else {
System.out.println("Objects are different.");
}
}
}
Singleton Class Using Thread Safe Method
package com.hareeshsoni.singletonexample;
/**
* @author HAREESH
*
*/
public class SingletonUsingThreadSafe {
// Declaring Static variable reference
private static SingletonUsingThreadSafe singletonUsingThreadSafe = null;
// Creating private constructor
private SingletonUsingThreadSafe() {
}
// Declaring static synchronized method
public static synchronized SingletonUsingThreadSafe getInstance() {
if(singletonUsingThreadSafe == null) {
return singletonUsingThreadSafe = new SingletonUsingThreadSafe();
}
return singletonUsingThreadSafe;
}
}
Test above Singleton Using Thread Safe Example here.
package com.hareeshsoni.singletonexample;
/**
* @author HAREESH
*
*/
public class SingletonUsingThreadSafeMain {
public static void main(String[] args) {
SingletonUsingThreadSafe object1 = SingletonUsingThreadSafe.getInstance();
SingletonUsingThreadSafe object2 = SingletonUsingThreadSafe.getInstance();
SingletonUsingThreadSafe object3 = SingletonUsingThreadSafe.getInstance();
// We will check here above created objects are equal or not
if (object1 == object2 && object2 == object3) {
System.out.println("Objects are same.");
} else {
System.out.println("Objects are different.");
}
}
}