Skip to main content

Singleton Pattern revisited

As the name suggest, Singleton Pattern restricts to the creation of one and only one object of a class. This is very useful whenever we want to restrict the creation of an object to single instance. This is very small and sweet type pattern that is used in many cases.
Let's take an example and see how it is used in the code
public class SingleObject {
 private static SingleObject singleObject;

 private SingleObject() {
 }

 public static SingleObject createInstance() {
  if (singleObject == null) {
   singleObject = new SingleObject();
  }
  return singleObject;
 }
}
Line by line explanation
Line 2: creates private instance of the class
Line 4: constructor is private, so that no outer class can create object of this class
Line 7: creating a static method to get an instance of the class. We have defined method as static so that we don't need to create a object to call this method. Since it is static we can call this method by name of the class i.e. SingleObject.createInstance().
Line 8: if object is null then we will create an object of the class else we will return the previous one.
Now, this type of initialization of class is known as the classic style for Singleton.
Here, we can say that this may fail i.e. single object concept, in the multi-threaded environment. For this, we make the method synchronized. This will change something like
public static synchronize createInstance(){
Some of you think that it will be overhead as it will take more memory and so. But does it really affect it, because this will call only once at the time of creation of the object and not always.
This type of initialization of class is known as the thread-safe style for Singleton.
We can also make the object early by changing the line no 2
private static SingleObject singleObject = new SingleObject();
This is called eager initialization of the object. In this case, object is already created and whenever thread tries to call it will simply return the object. It all depends on what conditions are you building the class or calling it.
Hope everything is clear :).

Comments

Popular posts from this blog

Struts 2 Hello World Example

I had seen many new deveopers struggling against struts2 hello world example. So I decided to write a small example. Below are the required libraries to run this example which are easily availabel struts2-core-2.1.8.1 xwork-core-2.1.6 commons-logging-1.0.4 commons-logging-api-1.1 freemarker-2.3.8 ognl-2.7.3 commons-fileupload-1.2 The structure of the applictaion which I am following is (Eclipse IDE) Struts2Demo |---src | |----org | | |----vinod | | | |----action | | | | |----HelloWorld।java |---struts.xml |---WebContent | |---jsp | |---HelloWorld।jsp |---index.jsp |---WEB-INF | |---lib | |---web.xml Struts 2 in Action It is true that different IDE's use different structure, but at last when war is build they follow same structure. Lets start... HelloWorld.java import com.opensymphony.xwork2.ActionSupport; public class HelloWorld extends ActionSupport { String greetings = null; public String execute() throws Exception { setGreetings("Hel

Getting height and width of image in Java

Yesterday I was working on something that requires manipulation of image for getting its properties. After searching over the internet I found a very intersting class on Java i.e ImageIO and BufferedImage class. These classes are good enough to manipulate images. there are many other claases also. But what I need i got it from these. I found many developers searching over internet for getting properties of image and there is no good small example for that. Thats why I thought why not creating a simple code to manipulate the image and help the developers. Here is the small code that helps to get the height and width of the image. Enjoy it!! import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class GetImage { public static void main(String[] args) { try { File f = new File("E:/Vinod/Docs/Pics/krishna_01.jpg"); BufferedImage image = ImageIO.read(f); int height = image.getHeight(); in

Struts 2 Ajax drop down Example

Struts 2 has emerged as boon for developers. But the documentation available is very small. So I had decided to give a brief demonstration of the ajax used in struts 2.1.8.1 Libraries used: commons-beanutils-1.7.0.jar commons-fileupload-1.2.jar commons-logging-1.1.jar commons-logging-api-1.1.jar freemarker-2.3.8.jar struts2-core-2.1.8.1.jar struts2-dojo-plugin-2.1.8.1.jar xwork-core-2.1.6.jar In this example when u select from one drop down the other will populate accordingly. You can use it as it is or play with it. Enjoy !! index.jsp <%@ taglib prefix="s" uri="/struts-tags" %> <s:action name="ListingAction" executeResult="true"></s:action> listing.jsp <%@ taglib prefix="s" uri="/struts-tags"%> <%@ taglib prefix="sx" uri="/struts-dojo-tags"%> Listing detail.jsp <%@ taglib prefix="s" uri="/struts-tags"