jSingleton应该用单个或多个接口替换。这究竟意味着什么?

时间:2015-08-17 13:37:30

标签: java unit-testing design-patterns tdd

我遇到过一篇关于TDD的文章,其中作者提到Singleton是一种反模式,为了避免这种情况,一种解决方案是Singleton应该用单个或多个接口替换。这究竟意味着什么?一个例子将非常有用。

1 个答案:

答案 0 :(得分:1)

通常会访问单身人士,例如SingletonInstance si = SingletonInstance.getInstance()。从TDD迁移出来有两个步骤。

第一种是不直接使用SingletonInstance,但正如作者所说的“单个或多个接口”,例如SingletonService ss = SingletonInstance.getInstance(),以便服务API SingletonService是一个接口,实例实现。对于“多个”情况,单例API可以分解为每个都具有较小但内聚范围的接口,因此每个接口都服从single responsibility principle

第二步,特别是对于TDD,是注入实例而不是查找它。如果你的模块知道如何找到它需要的东西,那么它就太过于无法模拟。但是,如果您的模块提供了所需的服务(通过构造函数,mutators,DI等),那么您的模拟框架可以使用实现API的模拟服务轻松测试您的模块,以便执行测试。