[英]Shared singleton instance
我正在实现一个使用具有单例行为的共享实用程序类的程序。
实用程序类的一个实例在主线程中创建,并传递给实例化的所有其他对象:
SomeUtil util = new SomeUtil();
...
Foo foo = new Foo(util, arg1, arg2)
Bar bar = new Bar(util, arg3, arg4, arg5)
是否有更优雅的方式来实现这一点(即设计模式)?
你为什么绕过实用工具? SomeUtil可以有静态方法,因此Foo和bar中的方法可以使用它。
此外,您可以实现实际的单例模式。
正如其他人所提到的,Singleton可以替代。 请注意,您当前的设计很容易进行单元测试(因为您正在注入SomeUtil
依赖项,因此在单元测试期间可以很容易地被模拟对象替换),而Singleton使得单元测试变得笨拙和困难:
话虽这么说,如果它是一个真正的实用类,即它没有内部状态,并且它不依赖于任何会使单元测试变得困难的东西(如数据库或文件系统),可以将它用作一个Singleton(虽然这引出了一个问题,为什么你需要实例化它 - 通常实用程序类只有静态方法,而私有构造函数来防止实例化)。
好吧,你实际上可以使用单例模式 ,它通常在类本身中存储对单个实例的静态引用。
public class SomeUtil {
private static final SomeUtil instance = new SomeUtil();
public static SomeUtil getInstance() {
return instance;
}
//...
}
这样做可以减少单元测试,所以要注意。 打破注入的依赖项通常比全局依赖项容易得多。
为什么不只是一个真正的单身人士? 比在任何地方传递一个实例要好得多。
可能最好的解决方法是添加/使用一些依赖注入框架。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.