In object-oriented programming, a singleton class is a class that can have only one object (an instance of the class) at a time.

After first time, if we try to instantiate the Singleton class, the new variable also points to the first instance created. So whatever modifications we do to any variable inside the class through any instance, it affects the variable of the single instance created and is visible if we access that variable through any variable of that class type defined.

To design a singleton class:

Make constructor as private. Write a static method that has return type object of this singleton class. Here, the concept of Lazy initialization is used to write this static method.

Normal class vs Singleton class: Difference in normal and singleton class in terms of instantiation is that, For normal class we use constructor, whereas for singleton class we use getInstance() method (Example code:I). In general, to avoid confusion we may also use the class name as method name while defining this method (Example code:II).

Implementing Singleton class with getInstance() method

filter_none edit

close play_arrow link

brightness_4

code class Singleton { private static Singleton single_instance = null ; public String s; private Singleton() { s = "Hello I am a string part of Singleton class" ; } public static Singleton getInstance() { if (single_instance == null ) single_instance = new Singleton(); return single_instance; } } class Main { public static void main(String args[]) { Singleton x = Singleton.getInstance(); Singleton y = Singleton.getInstance(); Singleton z = Singleton.getInstance(); x.s = (x.s).toUpperCase(); System.out.println( "String from x is " + x.s); System.out.println( "String from y is " + y.s); System.out.println( "String from z is " + z.s); System.out.println( "

" ); z.s = (z.s).toLowerCase(); System.out.println( "String from x is " + x.s); System.out.println( "String from y is " + y.s); System.out.println( "String from z is " + z.s); } }

chevron_right filter_none

Output:

String from x is HELLO I AM A STRING PART OF SINGLETON CLASS String from y is HELLO I AM A STRING PART OF SINGLETON CLASS String from z is HELLO I AM A STRING PART OF SINGLETON CLASS String from x is hello i am a string part of singleton class String from y is hello i am a string part of singleton class String from z is hello i am a string part of singleton class



Explanation: In the Singleton class, when we first time call getInstance() method, it creates an object of the class with name single_instance and return it to the variable. Since single_instance is static, it is changed from null to some object. Next time, if we try to call getInstance() method, since single_instance is not null, it is returned to the variable, instead of instantiating the Singleton class again. This part is done by if condition.

In the main class, we instantiate the singleton class with 3 objects x, y, z by calling static method getInstance(). But actually after creation of object x, variables y and z are pointed to object x as shown in the diagram. Hence, if we change the variables of object x, that is reflected when we access the variables of objects y and z. Also if we change the variables of object z, that is reflected when we access the variables of objects x and y.

Implementing Singleton class with method name as that of class name

filter_none edit

close play_arrow link

brightness_4

code class Singleton { private static Singleton single_instance= null ; public String s; private Singleton() { s = "Hello I am a string part of Singleton class" ; } public static Singleton Singleton() { if (single_instance == null ) { single_instance = new Singleton(); } return single_instance; } } class Main { public static void main(String args[]) { Singleton x = Singleton.Singleton(); Singleton y = Singleton.Singleton(); Singleton z = Singleton.Singleton(); x.s = (x.s).toUpperCase(); System.out.println( "String from x is " + x.s); System.out.println( "String from y is " + y.s); System.out.println( "String from z is " + z.s); System.out.println( "

" ); z.s = (z.s).toLowerCase(); System.out.println( "String from x is " + x.s); System.out.println( "String from y is " + y.s); System.out.println( "String from z is " + z.s); } }

chevron_right filter_none

Output:

String from x is HELLO I AM A STRING PART OF SINGLETON CLASS String from y is HELLO I AM A STRING PART OF SINGLETON CLASS String from z is HELLO I AM A STRING PART OF SINGLETON CLASS String from x is hello i am a string part of singleton class String from y is hello i am a string part of singleton class String from z is hello i am a string part of singleton class

Explanation: In the Singleton class, when we first time call Singleton() method, it creates an object of class Singleton with name single_instance and return it to the variable. Since single_instance is static, it is changed from null to some object. Next time if we try to call Singleton() method, since single_instance is not null, it is returned to the variable, instead of instantiating the Singleton class again.

This article is contributed by Pavan Gopal Rayapati. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

My Personal Notes arrow_drop_up Save



Improved By : baker6romeo