Одноэлементный шаблон определенно используется слишком часто и имеет свою долю трудностей (модульное тестирование является каноническим примером), но, как и все в дизайне, вам нужно взвесить плюсыи минусы для вашего конкретного сценария.У шаблона синглтона есть свои применения.Существуют варианты, которые могут позволить вам получить поведение синглтона, одновременно облегчая некоторые из присущих проблем:
Перехват (часто называемый аспектно-ориентированным программированием, хотя я видел дебаты о том, чтоони не совсем одно и то же ... не могу найти статью, которую я читал об этом в данный момент), безусловно, вариант.Вы можете использовать любую комбинацию инжекции конструкции, шаблон декоратор , абстрактную фабрику и инверсию контейнера управления .Я не разбираюсь в своих контейнерах Java IoC, но есть некоторые контейнеры .Net, которые позволяют автоматический перехват (я полагаю, что Spring.Net делает, так что, вероятно, Spring (Java) имеет это встроенный).Это очень удобно для любого типа сквозных задач, когда вам необходимо выполнять определенные типы действий на нескольких уровнях (безопасность, ведение журнала и т. Д.).Кроме того, большинство IoC-контейнеров позволяют контролировать управление временем жизни, поэтому вы сможете обрабатывать свой регистратор как одноэлементный, без необходимости фактически реализовывать одноэлементный шаблон вручную.
Подводя итог.Если синглтон подходит для вашего сценария (кажется правдоподобным из вашего описания), сделайте это.Просто убедитесь, что вы взвесили все за и против.Возможно, вы захотите попробовать другой подход и сравнить два.