Я привык писать синглтон в стиле enum, когда вдруг кто-то просматривал мой код и попросил меня изменить его, потому что это не входит в соглашение о кодировании проекта.Он спросил меня, в чем выгода, я просто сказал, что писать легче.
Еще одно преимущество синглетов в стиле enums по сравнению с классическими состоит в том, что они имеют одноэлементную семантику перед сериализацией объектов Java.(Сериализация Java Object и базовый класс enum объединяются, чтобы гарантировать, что десериализация не создает копии констант enum. Довольно сложно сделать это правильно для одноэлементной реализации, реализованной классическим способом. И если вы ошибетесь, то это может бытьнесколько экземпляров какого-то одноэлементного класса ... и, возможно, проблем.)
Но я был бы склонен тщательно изучить основание для возражения вашего коллеги.
- Специально ли подходит стиль кодированиязапрещать перечисления?
- Запрещает ли стиль кодирования специально синглтоны в стиле перечисления?
- Предписывает ли стиль кодирования конкретный способ реализации синглетонов?
Если нетиз вышесказанного, то «не в стандарте кодирования» не звучит как обоснованное возражение.(Конечно, что-то не обязательно должно быть явно «в» стандарте кодирования, чтобы быть допустимым ... это было бы сумасшествием, связанным с контролем!)
Полагаю, ваш коллега заметил пример синглтона в вашем стандарте кодирования и пришел к выводу (неправильно), что это означает, что синглеты должны быть реализованы таким образом.
(или, может быть, вы действительно изобилует чрезмерно предписывающим стандартом кодирования. Если это так, у вас есть мое сочувствие.)
Другой момент заключается в том, что шаблон Singleton нужно использовать экономно, поскольку это является препятствиемк тестируемости и потенциально проблематично для приложений, развертываемых в веб-контейнерах и т. п.