gpt4 book ai didi

java - 一次性加载配置属性的设计模式?

转载 作者:IT老高 更新时间:2023-10-28 20:55:54 25 4
gpt4 key购买 nike

我经常面临在内存中存储从文件系统上的文件加载的一些(可能很复杂)配置设置的问题。但是,我想知道是否有比我一直在使用的更好的方法来构建解决这个问题的模式。

基本上,我目前的解决方案包括三个步骤。

  1. 构建一个单例。由于数据是持久的并且保证不会在应用程序的运行时发生变化,因此应该只需要一个对象实例。

  2. 当第一次请求对象时,创建对象并从文件中读取。

  3. 使用 getter 公开数据。

这使得我的很多代码看起来像这样:MyConfiguration.getInstance().getWeightOfBomb(),我觉得这很奇怪。

有没有更好的方法以更语义化的方式处理这个问题?

最佳答案

依赖注入(inject)。您不一定必须使用像 Spring 这样的 DI 框架。或 Guice但是你真的想避免在你的代码中乱扔单例。您仍然可以在实现中使用单例,但是您的其余代码没有理由需要知道它是单例。在单元测试和重构时,单例是巨大的痛苦。让您的代码引用一个接口(interface)。例如,

 interface MyConfig {
double getWeightOfBomb();
}

class SomeClass {
private MyConfig myConfig;

public void doSomething() {
myConfig.getWeightOfBomb();
}
}

class MyConfigImpl implements MyConfig {
public double getWeightOfBomb() {
return MyConfiguration.getInstance().getWeightOfBomb();
}
}

如果您使用 DI 框架,只需设置您的类以注入(inject)您的 MyConfig 实现。如果您不这样做,那么仍然具有所有好处的最懒惰的方法是执行以下操作:

 class SomeClass {
private MyConfig myConfig = new MyConfigImpl();
}

这真的取决于你。重要的是,当您后来意识到您需要改变行为和/或进行单元测试时,您可以逐个实例替换 myConfig

关于java - 一次性加载配置属性的设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503489/

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