2013-08-01 31 views
4

我在一些博客讀取單妨礙測試因爲它會導致高耦合和嘲笑不能代替它來代替,因此該解決方案是實現一個接口和在圍繞它傳遞參數。我沒有鏈接到博客,只要我找到它就會附上它。但由於staticgetInstance()方法不可能。優勢的Singleton的實現接口

那麼在單例模式中實現接口是否有優勢?

public interface SingletonInterface{ 

    //some methods 
} 

public class Singleton1 implements SingletonInterface{ 

    //Usual singleton methods 
} 
+0

強制性免責聲明:http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – assylias

+0

@assylias是的,我看過的所有帖子我可以找到關於辛格爾頓。儘管如此,謝謝你的聲明。 –

+0

這是我的最愛:http://misko.hevery.com/attachments/Guide-Writing%20Testable%20Code.pdf - 這是更一般的,但有幾個很好的例子單身人士。 – assylias

回答

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()); 
+0

哦,是的。得到它了。我不知道爲什麼我感到困惑。 –

+0

除此之外,在java 8中,您還可以定義供應商。 –