Я бы сказал, что одноэлементный класс предпочтительнее только в одном случае: когда у вас есть какая-то конфигурация для хранения, которая является общесистемной, ее редко (если вообще когда-либо) нужно обновлять.
В качестве примера того, что я имею в виду, у меня есть одноэлементный шаблон в одном из моих приложений, который представляет собой устройство NAT интернет-соединения пользователя. Это приложение предназначено для настольного использования, и поэтому редко (если вообще когда-либо) видят изменения в интернет-соединении. Предположительно, пользователь может перенести свой ноутбук в новое место, и это изменится; Тем не менее, существует метод для воссоздания состояния в этом событии, но это очень редко измененное состояние, которое может занять несколько секунд для инициализации.
Эту потребность сохранять дорогостоящее, редко изменяющееся и глобально применимое состояние лучше всего делать с помощью компонента с областью приложения (мой предпочтительный вариант) или синглтонового компонента. Статические методы не так хороши для сохранения такого состояния, хотя вы также можете сделать это, используя статические поля, чтобы создать псевдо-синглтон. (Не уверен, что для этого есть лучшее название - вероятно)
В общем, я не рекомендую использовать одноэлементные паттерны, если вы можете избежать этого, поскольку это затрудняет повторное использование. Если вы используете платформу CDI, поместите свой компонент на уровень приложения для более легкого повторного использования. (Это может не беспокоить вас, в противном случае вы можете спокойно игнорировать этот совет)