第一种方案:定义一个私有的静态的类变量,一个私有的构造方法和一个公共的静态的方法。
public class Singleton {
private static Singleton s;
private Singleton() {}
public static Singleton getInstance() {
if(s == null) {
s = new Singleton();
}
return s;
}
}
第二种方案:定义一个私有的静态的boolean成员变量,一个公共的构造方法
public class Singleton {
//判断是否是新的实例
static boolean instance_flag = false;
public Singleton() {
if(instance_flag) {
throw new SingletonException("Only one instance allowed");
} else {
instance_flag = true; // set flag for 1 instance
}
}
}
//自定义一个异常类
public class SingletonException extends RuntimeException {
public SingletonException(String s) {
super(s);
}
}
//测试类public class SingletonTest {
public static void main(String[] args) {
Singleton s1;
Singleton s2;
System.out.println("Creating one instance");
try {
s1 = new Singleton();
} catch (RuntimeException e) {
System.out.println(e.getMessage());
}
System.out.println("Creating two instance");
try {
s2 = new Singleton();
} catch (RuntimeException e) {
System.out.println(e.getMessage());
}
}
}