Mega Code Archive

 
Categories / Java / Design Pattern
 

Singleton pattern in Java 3

/* The Design Patterns Java Companion Copyright (C) 1998, by James W. Cooper IBM Thomas J. Watson Research Center */ class Printer {   //this is a prototype for a printer-spooler class   //such that only one instance can ever exist   static boolean instance_flag = false; //true if 1 instance   public Printer() throws SingletonException {     if (instance_flag)       throw new SingletonException("Only one printer allowed");     else       instance_flag = true; //set flag for 1 instance     System.out.println("printer opened");   }   public void finalize() {     instance_flag = false;   } } class SingletonException extends RuntimeException {   //new exception type for singleton classes   public SingletonException() {     super();   }   public SingletonException(String s) {     super(s);   } } public class SinglePrinter {   static public void main(String argv[]) {     Printer pr1, pr2;     //open one printer--this should always work     System.out.println("Opening one printer");     try {       pr1 = new Printer();     } catch (SingletonException e) {       System.out.println(e.getMessage());     }     //try to open another printer --should fail     System.out.println("Opening two printers");     try {       pr2 = new Printer();     } catch (SingletonException e) {       System.out.println(e.getMessage());     }   } }