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