Singleton Design Pattern Using Serialization


Introduction


Singleton Design Pattern is complex to implement at Distributed environment, Where we have multiple JVM install. Multiple threads will invoke the Singleton class from various environment simultaneously which cause multiple object creation.

We need to implement Serializable interface in Singleton class so that we can store it’s state in file system and retrieve it at later point of time. Serializable interface helps to write object and later read object and use it.

KWSingletonDesignPatternUsingSerialization.java: This class implemented Serializable interface and return one instance of object.

 

package com.singletondesignpattern;

import java.io.Serializable;

/**
 * This class helps to implement Singleton Design Pattern using Serialization interface.
 * Only one thread will get the lock on getInstance method. private Constructor.
 *
 * @author dknitk
 *
 */
public class KWSingletonDesignPatternUsingSerialization implements Serializable {
    
    private static final long serialVersionUID = -7604766932017737115L;
    
    private static KWSingletonDesignPatternUsingSerialization kwSingletonDesignPatternUsingSerialization = null;

    /**
     * Private constructor so it would not call from outside.
     */
    private KWSingletonDesignPatternUsingSerialization() {

    }
    /**
     * This method helps to instantiate KWSingletonDesignPatternUsingSerialization object.
     * Only one thread will get the lock as we made method as synchronized.
     *
     * @return KWSingletonDesignPatternUsingSerialization
     */
    public static KWSingletonDesignPatternUsingSerialization getInstance() {
        
        if (kwSingletonDesignPatternUsingSerialization == null) {

            synchronized (KWSingletonDesignPatternUsingSerialization.class) {
                if (kwSingletonDesignPatternUsingSerialization == null) {
                    // Call constructor to instantiate Object
                    kwSingletonDesignPatternUsingSerialization = new KWSingletonDesignPatternUsingSerialization();
                }
            }

        }
        return kwSingletonDesignPatternUsingSerialization;        
    }
}

 

KWSingletonDesignPatternSearializableMain.java: This class helps to execute program.

 

package com.singletondesignpattern;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;

/**
 * This class helps to invoke Singleton Design Pattern examples.
 *
 * @author dknitk
 *
 */
public class KWSingletonDesignPatternSearializableMain {
    /**
     * This method helps to execute program.
     * @param args
     * @throws FileNotFoundException
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {

        KWSingletonDesignPatternUsingSerialization instanceOne = KWSingletonDesignPatternUsingSerialization
                .getInstance();

        ObjectOutput out = new ObjectOutputStream(new FileOutputStream("filename.ser"));
        // Write the object
        out.writeObject(instanceOne);
        out.close();

        // Deserialize Object
        ObjectInput in = new ObjectInputStream(new FileInputStream("filename.ser"));
        KWSingletonDesignPatternUsingSerialization instanceTwo = (KWSingletonDesignPatternUsingSerialization) in
                .readObject();
        in.close();

        System.out.println("instanceOne hashCode=" + instanceOne);
        System.out.println("instanceTwo hashCode=" + instanceTwo);
    }

}

Leave a Reply

Your email address will not be published. Required fields are marked *