Singleton - это проект anti-pattern , в котором классу присваивается закрытый конструктор и специальная статическая функция "getInstance ()", "INSTANCE ()" или "instance ()", которая отвечает за возврат (и, возможно, создание, в зависимости от того, используете ли вы ленивые синглтоны или нет) экземпляр единственного объекта. Синглтоны часто приводят к раздуванию зависимостей, скрывая зависимости, и затрудняют макет одноэлементного класса во время модульного тестирования или замену синглтона чем-то, что не является одноэлементным, когда оказывается, что предположение, что объект должен быть одноэлементным, на самом деле держится.
Решением одноэлементного анти-паттерна является использование так называемого «внедрения зависимостей». Вы можете найти этот Google Techtalk, озаглавленный Java on Guice , который объясняет внедрение зависимостей, просвещение.
Существует также другая форма одноэлементности, которая не связана с одноэлементным анти-паттерном ... то есть, если вам случается создать только один экземпляр класса и передать его, но вы не применяете принудительно Singleton-ness, используя статическую конструкторскую функцию, тогда вы фактически сделали класс singleton, не ограничивая себя зависимостью и не предотвращая возможность того, что класс не будет singleton в дальнейшем. В упомянутом мною Google Techtalk докладчики упоминают об этой форме одиночества в конце выступления.