Пункт 3 Josh Block Эффективная Java (Enforce Singleton Property с частным конструктором или Enumerator) упоминает, что "Хотя этот подход еще не принят, одноэлементный тип перечисления - лучший способ реализовать одноэлементный."
Пример:
public enum Elvis {
INSTANCE;
private final String[] favoriteSongs =
{ "Hound Dog", "Heartbreak Hotel" };
public void printFavorites() {
System.out.println(Arrays.toString(favoriteSongs));
}
}
Продолжение: "Этот подход функционально эквивалентен общедоступному полевому подходу, за исключением того, что он более краток, предоставляет бесплатную сериализующую технику и предоставляет надежную гарантию против множественного экземпляра даже в условиях сложных атак с сериализацией или отражением."
Самый большой недостаток, который я вижу, - это не перечисления, которые не должны иметь изменяемое состояние? Обычно используется Singleton с состоянием.
Итак, этот шаблон действительно стал более распространенным с даты публикации (второе издание опубликовано в 2008 году)?