Каков достойный способ внедрения зависимости в одноэлементный класс?

У меня есть синглтон, который зависит от другого класса, поэтому я хотел бы внедрить эту зависимость, чтобы сделать его пригодным для модульного тестирования. Поскольку нет возможности использовать инъекцию конструктора в синглтоне, я думаю, мне следует вместо этого использовать установщик, но мне это действительно не нравится, поскольку в какой-то момент кто-то (возможно, я) забудет вызвать установщик. Вы, конечно, можете внедрить зависимые объекты в метод getInstance синглтона, но это тоже довольно уродливо. Есть ли более эффективные способы решения этой проблемы (без использования таких инструментов, как контейнеры IoC)?

public class Singleton {
    private ISomeDependency _dependency;
    private static final Singleton INSTANCE = new Singleton();
    private Singleton() {
    }
    public static Singleton getInstance() {
       return INSTANCE;
    }
    ...
}
5
задан Christian 26 May 2011 в 08:25
поделиться