Я прочитал Effective Java и там было сказано, что синглтон лучше всего реализовать с помощью enum
.
Этот подход функционально эквивалентен общедоступному полевому подходу, за исключением того, что он более лаконичен, предоставляет механизм сериализации бесплатно и обеспечивает железную гарантию против множественных экземпляров, даже перед сложными атаками сериализации или отражения. Хотя этот подход еще не получил широкого распространения, одноэлементный тип перечисления является лучшим способом реализации синглтона.
Тем не менее, это кажется компромиссом для достижения сериализации на лету и истинного единственного экземпляра, но вы теряете более дружественный подход ООП классического синглтона. Перечисления не могут быть унаследованы, могут реализовывать только интерфейс, и если вы хотите предоставить каркасный класс, вам нужно создать вспомогательный класс.
Итак, почему мы должны принимать enum как лучшую реализацию для синглтона, кроме причин, указанных выше?