OCP

Singletons compiled

Intro to singletons

When applying the singleton pattern we are aiming to create only one instance of a class in memory of the application.

Singleton pattern makes sure that:

  • only one instance of a class is in the application
  • there is one point of access to this object within the application

Singleton:

  • Singletons are obtained as a private static variable within their class.
  • We access the object by calling a static method.
  • A singleton’s constructor is private.

 

Creation and Compilation

We can instantiate a singleton object when we define the instance reference. Or we create it using a static initialisation block that is executed when the class is loaded.

Examples

Instantiate when declared
class SingletonA{
    private static SingletonA ob = new SingletonA();

    private SingletonA(){}

    public static synchronized SingletonA getInstance() {
        return ob;
    }
}
Instantiate with static block
class SingletonB {
    private static SingletonB ob;

    private SingletonB(){}

    static {
        ob = new SingletonB();
    }

    public static synchronized SingletonB getInstance() {
        return ob;
    }
}

Compilation

What do you think you will see when you compare the structure of the compiled .class files of InstanceA.java and InstanceB.java ?

There is nothing to compare! Both .class files have exactly the same structure:

class SingletonA {
    private static SingletonA ob = new SingletonA();

    private SingletonA() {
    }

    public static synchronized SingletonA getInstance() {
        return ob;
    }
}

 

class SingletonB {
    private static SingletonB ob = new SingletonB();

    private SingletonB() {
    }

    public static synchronized SingletonB getInstance() {
        return ob;
    }
}

 

 

Leave a Reply

Your email address will not be published.