我试图学习Singleton设计模式,我遇到了以下示例.但是,似乎我能够创建该类的多个实例.
我认为Singleton的观点是只允许在任何给定时间创建一个类的单个实例.任何人都可以解释我在这里缺少的东西吗?如何验证在任何给定时间只创建一个对象?
public class ChocolateBoiler {
private boolean empty;
private boolean boiled;
private static ChocolateBoiler uniqueInstance;
private ChocolateBoiler(){
empty = true;
boiled = false;
}
public static synchronized ChocolateBoiler getInstance(){
if(uniqueInstance == null){
uniqueInstance = new ChocolateBoiler();
}
return uniqueInstance;
}
public void fill(){
if(isEmpty()){
System.out.println("filling");
empty = false;
boiled = false;
}
System.out.println("already full");
}
public boolean isEmpty(){
System.out.println("empty");
return empty;
}
public boolean isBoiled(){
System.out.println("boiled");
return boiled;
}
public void drain() {
if (!isEmpty() && isBoiled()) {
System.out.println("draining");
empty = true;
}
System.out.println("already empty");
}
public void boil(){
if(!isEmpty() && isBoiled() ){
System.out.println("boiled");
boiled = true;
}
System.out.println("either empty or not boiled?");
}
public static void main(String[] args) {
ChocolateBoiler boiler1 = new ChocolateBoiler();
boiler1.fill();
boiler1.boil();
boiler1.boil();
boiler1.drain();
boiler1.drain();
boiler1.isEmpty();
System.out.println("\nboiler 2");
ChocolateBoiler boiler2 = new ChocolateBoiler();
boiler2.fill();
System.out.println("\nboiler 1");
boiler1.isBoiled();
}
}