Синглтон в стиле enum в стиле Java и статический экземпляр - PullRequest
1 голос
/ 05 апреля 2011

Я привык писать синглтон в стиле enum, когда вдруг кто-то просматривал мой код и попросил меня изменить его, потому что это не входит в соглашение по кодированию проекта.Он спросил меня, в чем выгода, я просто сказал, что легче написать.

Я просто хочу знать, нет ли пользы от этого.Я понимаю, что enum для java, возможно, не был реализован для этой цели, но даже тогда, неправильно ли использовать его таким образом?

Ответы [ 4 ]

5 голосов
/ 05 апреля 2011

Я привык писать синглтон в стиле enum, когда вдруг кто-то просматривал мой код и попросил меня изменить его, потому что это не входит в соглашение о кодировании проекта.Он спросил меня, в чем выгода, я просто сказал, что писать легче.

Еще одно преимущество синглетов в стиле enums по сравнению с классическими состоит в том, что они имеют одноэлементную семантику перед сериализацией объектов Java.(Сериализация Java Object и базовый класс enum объединяются, чтобы гарантировать, что десериализация не создает копии констант enum. Довольно сложно сделать это правильно для одноэлементной реализации, реализованной классическим способом. И если вы ошибетесь, то это может бытьнесколько экземпляров какого-то одноэлементного класса ... и, возможно, проблем.)

Но я был бы склонен тщательно изучить основание для возражения вашего коллеги.

  • Специально ли подходит стиль кодированиязапрещать перечисления?
  • Запрещает ли стиль кодирования специально синглтоны в стиле перечисления?
  • Предписывает ли стиль кодирования конкретный способ реализации синглетонов?

Если нетиз вышесказанного, то «не в стандарте кодирования» не звучит как обоснованное возражение.(Конечно, что-то не обязательно должно быть явно «в» стандарте кодирования, чтобы быть допустимым ... это было бы сумасшествием, связанным с контролем!)

Полагаю, ваш коллега заметил пример синглтона в вашем стандарте кодирования и пришел к выводу (неправильно), что это означает, что синглеты должны быть реализованы таким образом.

(или, может быть, вы действительно изобилует чрезмерно предписывающим стандартом кодирования. Если это так, у вас есть мое сочувствие.)


Другой момент заключается в том, что шаблон Singleton нужно использовать экономно, поскольку это является препятствиемк тестируемости и потенциально проблематично для приложений, развертываемых в веб-контейнерах и т. п.

3 голосов
/ 05 апреля 2011

Вы можете обратиться к:

Item 3 of Effective Java 2nd --  Enforce the singleton property with a private constructor or an enum type

Полное и подробное обсуждение этого вопроса.

0 голосов
/ 10 сентября 2014

Я могу спать по ночам, не беспокоясь о том, что мой синглтон может стать мультиплетон в будущем

Просто убедитесь, что никто не добавит другое значение Enum к вашему синглтону Enum, так что вы не получите следующее:

public enum MySingleton{ 
// Should only have one INSTANCE, so please! don't add more values here 
INSTANCE, INSTANCE2,INSTANCE3,... etc ;
0 голосов
/ 05 апреля 2011

Вы оба правы. Хорошие соглашения о кодировании так же ценны, как и элегантный код. Ваша задача состоит в том, чтобы представить вашу идею в соглашении о кодировании и сначала изменить ее, прежде чем добавлять новые стили в потенциально большой проект.

Чего не должно быть, это 50 способов объявления синглетонов, которые в любом случае считаются анти-паттернами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...