Why Enum Singleton Are Meliorate Inwards Java

Enum Singletons are novel means to implement Singleton pattern inward Java past times using Enum amongst merely ane instance. Though Singleton pattern inward Java exists from long fourth dimension Enum Singletons are relatively novel concept too inward practise from Java five onwards later introduction of Enum every bit keyword too feature. This article is somewhat related to my before post on Singleton, 10 interview questions on Singleton pattern inward Java where nosotros bring discussed mutual questions asked on interviews close Singleton pattern too 10 Java enum examples, where nosotros bring seen how versatile enum tin be. This post is close why should nosotros role Enum every bit Singleton inward Java, What do goodness it offers compared to conventional singleton methods etc.

Java Enum too Singleton Pattern


1) Enum Singletons are slow to write
This is past times far biggest advantage, if yous bring been writing Singletons prior ot Java five than yous know that fifty-fifty amongst double checked locking yous tin bring to a greater extent than than ane instances. though that number is fixed amongst Java retentivity model improvement too gurantee provided past times volatile variables from Java five onwards but it yet tricky to write for many beginners. compared to double checked locking amongst synchronization Enum singletons are cake walk. If yous don't believe than merely compare below code for conventional singleton amongst double checked locking too Enum Singletons:


Singleton using Enum inward Java
This is the means nosotros to a greater extent than oft than non declare Enum Singleton , it may incorporate instace variable too lawsuit method but for sake of simplicity I haven’t used any, merely beware that if yous are using whatever lawsuit method than yous demand to ensure thread-safety of that method if at all it deport upon the acre of object. By default creation of Enum lawsuit is thread security but whatever other method on Enum is programmers responsibility.

/**
* Singleton pattern representative using Java Enumj
*/
public enum EasySingleton{
    INSTANCE;
}

You tin acess it past times EasySingleton.INSTANCE, much easier than calling getInstance() method on Singleton.

Singleton representative amongst double checked locking
Below code is an representative of double checked locking inward Singleton pattern, hither getInstance() method checks 2 times to encounter whether INSTANCE is nil or non too that’s why it’s called double checked locking pattern, recall that double checked locking is broker before Java five but amongst the guranteed of volatile variable inward Java 5 retentivity model, it should run perfectly.

/**
* Singleton pattern representative amongst Double checked Locking
*/
public class DoubleCheckedLockingSingleton{
     
private volatile DoubleCheckedLockingSingleton INSTANCE;
 
     
private DoubleCheckedLockingSingleton(){}
 
     
public DoubleCheckedLockingSingleton getInstance(){
         
if(INSTANCE == null){
           
synchronized(DoubleCheckedLockingSingleton.class){
               
//double checking Singleton instance
               
if(INSTANCE == null){
                    INSTANCE
= new DoubleCheckedLockingSingleton();
               
}
           
}
         
}
         
return INSTANCE;
     
}
}

You tin telephone phone DoubleCheckedLockingSingleton.getInstance() to teach access of this Singleton class.

Now Just expect at amount of code needed to do a lazy loaded thread-safe Singleton. With Enum Singleton pattern yous tin bring that inward ane work because creation of Enum lawsuit is thread-safe too guranteed past times JVM.

People may debate that in that place are ameliorate means to write Singleton instead of Double checked locking approach but every approach has in that place ain advantages too disadvantages similar I mostly prefer static champaign Singleton intialized during classloading every bit shwon inward below example, but continue inward hear that is non a lazy loaded Singleton:

Singleton pattern amongst static manufactory method
This is ane of my favorite method to impelemnt Singleton pattern inward Java, Since Singleton lawsuit is static too final variable it initialized when aeroplane is get-go loaded into memeory then creation of lawsuit is inherently thread-safe.

/**
* Singleton pattern representative amongst static manufactory method
*/


public class Singleton{
    //initailzed during aeroplane loading
    private static final Singleton INSTANCE = new Singleton();
 
    //to preclude creating unopen to other lawsuit of Singleton
    private Singleton(){}

    public static Singleton getSingleton(){
        return INSTANCE;
    }
}

You tin telephone phone Singleton.getSingleton() to teach access of this class.


2) Enum Singletons handled Serialization past times themselves
Another work amongst conventional Singletons are that in ane lawsuit yous implement serializable interface they are no longer rest Singleton because readObject() method e'er render a novel lawsuit merely similar constructor inward Java. yous tin avoid that past times using readResolve() method too discarding newly created lawsuit past times replacing amongst Singeton every bit shwon inward below representative :

    //readResolve to preclude unopen to other lawsuit of Singleton
   
private Object readResolve(){
       
return INSTANCE;
   
}

This tin teach fifty-fifty to a greater extent than complex if your Singleton Class keep state, every bit yous demand to brand them transient, but witn Enum Singleton, Serialization is guarnateed past times JVM.

3) Creation of Enum lawsuit is thread-safe
As stated inward quest 1 since creatino of Enum lawsuit is thread-safe past times default yous don't demand to worry close double checked locking.

In summary, given the Serialzation too thraead-safety guaranteed too amongst yoke of work of code enum Singleton pattern is best means to do Singleton inward Java five world. yous tin yet role other pop methods if yous experience then but I yet bring to discovery a convincing argue non to role Enum every bit Singleton, allow me know if yous got any.

Further Learning
Complete Java Masterclass
Why multiple inheritance is non supported inward Java

0 Response to "Why Enum Singleton Are Meliorate Inwards Java"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel