Эта реализация чаще всего встречается в Интернете.
private static class LazySomethingHolder {
public static Something something = new Something();
}
public static Something getInstance() {
return LazySomethingHolder.something;
}
Верна ли следующая более простая вариация, если нет, что с ней не так? Эта проблема характерна для Java или также присутствует в C ++?
public static Something getInstance() {
private static Something something = new Something();
return something;
}
Вы не можете иметь статические локальные переменные в Java.
Более простые альтернативы
private static final Something something = new Something();
public static Something getInstance() {
return something;
}
или мое предпочтение, если для.
enum Something {
INSTANCE;
}
Единственная проблема с этими шаблонами состоит в том, что если у вас есть несколько экземпляров, которые вы хотите загружать лениво, у вас должен быть класс каждый, или загрузка одного будет означать загрузку их всех.
Java (в отличие от c ++) не имеет локальных статических переменных, поэтому описанное вами просто невозможно. В c ++ вы, скорее всего, написали бы (известный как meyer singleton):
public static Something& getInstance() {
static Something something{};
return something;
}