Я думаю, что версия мистера Пью пользуется большим уважением, потому что она выполняет создание экземпляра синглтона только при вызове getInstance()
, т.е. не когда класс (класс, содержащий метод getInstance) загружен.Если ваша конструкция синглтона делает что-то дорогостоящим , тогда это может быть преимуществом для вас.Если вы похожи на большинство людей в мире, чьи синглтоны предназначены только для того, чтобы избегать статических методов (и вы не перешли на каркас внедрения зависимостей), то я бы не стал спать по этому поводу.
Как говорится в статье, метод мистера Пью более ленив, чем статическая переменная экземпляра, но на самом деле, если класс Singleton загружается, вы все равно будете вызывать метод getInstance.Так что, как упражнение по информатике, это полезно, но в реальном мире его преимущества спорны.
ps Меня не волнует пример мистера Блоха, так как использование перечисления означало бы сказать, что My Singleton IS-Перечисление, которое мне не подходит (особенно от того, кто справедливо говорит, что никогда не реализует интерфейс только для получения констант)