/*
The Design Patterns Java Companion
Copyright (C) 1998, by James W. Cooper
IBM Thomas J. Watson Research Center
*/
public class InstanceSpooler {
static public void main(String argv[]) {
Spooler pr1, pr2;
//open one printer--this should always work
System.out.println("Opening one spooler");
pr1 = Spooler.Instance();
if (pr1 != null)
System.out.println("got 1 spooler");
//try to open another printer --should fail
System.out.println("Opening two spoolers");
pr2 = Spooler.Instance();
if (pr2 == null)
System.out.println("no instance available");
//fails because constructor is privatized
//iSpooler pr3 = new iSpooler();
}
}
class Spooler {
//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
private Spooler() {
}
static public Spooler Instance() {
if (!instance_flag) {
instance_flag = true;
return new Spooler();
} else
return null;
}
public void finalize() {
instance_flag = false;
}
}