Традиционный способ реализации синглтона хорош, но для поддержания его статуса как истинного синглтона необходимо защитить себя от изощренных атак сериализации и отражения.Общий способ сделать это - сделать класс Implement Serializable, сделать все поля экземпляра временными, а также реализовать метод readResolve.(которые возвращают один и тот же экземпляр синглтона).
Шаблон Enum Singleton предоставляет все эти функции из коробки.Но основной причиной, по которой мне нравится вариант Enum, является его удобочитаемость.По моему мнению, он передает то, что делает, гораздо более кратко, чем традиционный синглтон. (Вам не нужно объяснять новому разработчику все капризы, связанные с сериализацией, и как сериализация может нарушить гарантию синглтона и почемувам нужен метод readResolve и т. д. и т. д.)