gpt4 book ai didi

java - 共享单例实例

转载 作者:行者123 更新时间:2023-12-01 14:05:35 25 4
gpt4 key购买 nike

我正在实现一个程序,它使用具有单例行为的共享实用程序类。

实用程序类的一个实例在主线程中创建并传递给所有其他实例化对象:

SomeUtil util = new SomeUtil();

...

Foo foo = new Foo(util, arg1, arg2)
Bar bar = new Bar(util, arg3, arg4, arg5)

有没有更优雅的方式来实现这一点(即设计模式)?

最佳答案

正如其他人所提到的,Singleton 可以作为替代方案。请注意,尽管您当前的设计很容易进行单元测试(因为您正在注入(inject) SomeUtil 依赖项,因此可以在单元测试期间轻松地被模拟对象替换),而 Singleton 使单元测试变得尴尬和困难:

  • 它使您的对象依赖于全局状态,因此更难以正确设置测试,并且容易出错(例如,忘记为特定测试正确初始化单例),
  • 理解代码更加困难,因为您无法轻松识别给定代码段是否依赖于全局状态,除非通过实际阅读整个代码。

  • 话虽这么说,如果它是一个真正的实用程序类,即它没有内部状态,并且它不依赖于任何会使单元测试变得困难的东西(如数据库或文件系统),则可以将其用作一个单例(尽管这引出了一个问题,为什么你需要实例化它——通常实用程序类只有静态方法,以及一个防止实例化的私有(private)构造函数)。

    关于java - 共享单例实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6815981/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com