为了账号安全,请及时绑定邮箱和手机立即绑定

静态变量 vs 单例

静态变量 vs 单例

吃鸡游戏 2021-06-01 13:12:42
我正在制作 Java REST 应用程序。我想知道我应该如何实现我的服务 - 我应该为整个应用程序使用静态服务变量还是像在 Spring MVC 中那样将服务作为单例。单例对象和在应用程序中只初始化一次对象有什么区别吗?
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

我应该为整个应用程序使用静态服务变量还是将服务作为单例

这取决于。你必须问自己两个问题才能找到答案:

static variable存储在哪里?

您有 2 个选择:

  1. 声明一个final class Services将所有可用服务保存为public static final变量的变量。

  2. 在每个服务类中创建一个public static final变量,称为INSTANCE

您会看到第一点将所有类都放在同一个位置。可能会聚集在一起,不可读且不易维护。

对于第二点,您几乎接近单例情况。

我需要懒惰或急切地初始化服务吗?

您再次有 2 个选项:

  1. 懒惰:使用静态持有者模式在第一次使用时懒惰地初始化单例

  2. 急切:public static final在服务类中创建一个变量,直接创建一个实例。

第一点有它的好处。如果您需要分配资源或需要执行任何其他“繁重”操作。这有效,并且是线程安全的

对于第二点,您会看到它就像第一个问题中的第二点。

结论

如前所述,这取决于用例。我可能会一直使用单身人士。因为所有关于它的状态和可用性的逻辑都保存在一个地方。


查看完整回答
反对 回复 2021-06-10
?
慕容708150

TA贡献1831条经验 获得超4个赞

如果你想要一些实用方法或常量变量,你应该选择 Static 而当一个类可以有状态并且状态可以改变(但对象仍然是一个)时,Singelton 就会出现。


查看完整回答
反对 回复 2021-06-10
?
白板的微信

TA贡献1883条经验 获得超3个赞

将服务创建为单例,这样您就可以在运行时获得更大的灵活性,因为您可以在不更改代码的情况下注入服务的任何实现。如果您的想法是使用服务类共享一些变量,则将它们标记为最终变量。


查看完整回答
反对 回复 2021-06-10
  • 3 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信