Я пытаюсь изучить шаблон дизайна 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();
}
}
Почему, по вашему мнению, создается два экземпляра? –
Ваш одноэлементный шаблон правильный, вы должны вызывать его из других классов –