我正在实现一个程序,它使用具有单例行为的共享实用程序类。
在主线程中创建了一个实用程序类的实例,并传递给所有其他实例化的对象:
SomeUtil util = new SomeUtil();
...
Foo foo = new Foo(util, arg1, arg2)
Bar bar = new Bar(util, arg3, arg4, arg5)
有没有更优雅的方式来实现它(例如,设计模式)?
我正在实现一个程序,它使用具有单例行为的共享实用程序类。
在主线程中创建了一个实用程序类的实例,并传递给所有其他实例化的对象:
SomeUtil util = new SomeUtil();
...
Foo foo = new Foo(util, arg1, arg2)
Bar bar = new Bar(util, arg3, arg4, arg5)
有没有更优雅的方式来实现它(例如,设计模式)?
SomeUtil
依赖项,因此在单元测试期间可以轻松地用模拟对象替换它),而单例模式使单元测试变得困难和棘手:
嗯,您可以使用单例模式,该模式通常在类本身中存储对单个实例的静态引用。
public class SomeUtil {
private static final SomeUtil instance = new SomeUtil();
public static SomeUtil getInstance() {
return instance;
}
//...
}
然而,这样做可能会使事情难以进行单元测试,所以请注意。通常,破坏注入的依赖关系比全局依赖关系容易得多。
解决这个问题最好的方法可能是添加/使用一些依赖注入框架。