【问题标题】:Advantage of Singleton implementing an interface单例实现接口的优势
【发布时间】:2013-08-01 07:58:42
【问题描述】:

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

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

public interface SingletonInterface{

   //some methods
}

public class Singleton1 implements SingletonInterface{

   //Usual singleton methods 
}

【问题讨论】:

  • @assylias 是的,我已经阅读了我可以在 Singleton 上找到的所有帖子。感谢您的免责声明。
  • 这是我最喜欢的:misko.hevery.com/attachments/…‎ - 它更通用,但有一些关于单例的好例子。
  • @assylias 是的,我关注了他的博客,以及 Youtube 上的所有视频以及我最喜欢的视频。 Misko 在这个话题上的解释非常棒。

标签: java design-patterns interface singleton


【解决方案1】:

但是由于静态 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());

【讨论】:

  • 哦,是的。知道了。我不知道为什么我会感到困惑。
  • 除此之外,在 java 8 中您还可以定义 Supplier
猜你喜欢
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
相关资源
最近更新 更多