Let’s take an example: a program has a PrintSpooler class. This class maintains a queue for printer requests and serializes them. The program cannot contain multiple PrintSpooler Objects because this can create unexpected printer output, thus defeating the purpose of having a Spooler class. Global variables are not permitted in Java, but in these types of situations they are needed. A way around this is to use the same object throughout the program. Code can be classed in such a way that it affords the facility of using it like a global object. The following code shows how to do this:
class PrintSpooler { static PrintSpooler pr; private PrintSpooler(){}; //Don't let anyone create objects directly public static PrintSpooler get() //Provide access to the shared PrintSpooler object { if(pr == null) pr = new PrintSpooler(); return pr; } public void print(String str){/*Print the string*/}; //Other member functions}
Making the constructor private disallows direct object creation. Static function