4

我在一些博客中读到,单例会阻碍测试,因为它会导致高耦合,并且不能替换模拟,因此解决方案是实现一个接口并在参数中传递它。我没有博客链接,我一找到就会附上。但由于static getInstance()方法,这将是不可能的。

那么在单例模式中实现接口有什么好处吗?

public interface SingletonInterface{

   //some methods
}

public class Singleton1 implements SingletonInterface{

   //Usual singleton methods 
}
4

1 回答 1

7

但是由于静态 getInstance() 方法是不可能的。

不,完全相反。关键是只有非常有限的代码需要知道它是一个单例。其他代码可以只使用该接口,您可以有不同的实现进行测试,甚至稍后将生产实现更改为不是单例,根本无需更改。

public void foo(SingletonInterface x) {
    // This code doesn't know it's a singleton. You can create fakes for testing.
}

...

// This code *does* know it's a singleton. Boo! Gradually refactor away...
foo(Singleton1.getInstance());
于 2013-08-01T08:00:29.990 回答