0

我正在使用网络服务来获取 4 种不同货币的汇率。到目前为止,我所做的是获取这些费率并将其存储在 4x4 矩阵中,以便可以轻松检索任何值,而无需每次都使用 Web 服务。

我想知道什么是最好的方法,使用设计模式(以及哪个更合适)来设置和获取这个矩阵的值。我目前只是使用这样的东西:

public void setPoundToEuro(float value) {
    currencyMatrix[0][1] = value;
}

public float getPoundToEuro() {
    return currencyMatrix[0][1];
}

我希望对需要使用此服务并获取这些值的任何类有更抽象的东西。像另一个调用方法的类只发送两个字符串,并且相同的方法将返回任何货币汇率,具体取决于收到的字符串。在这种情况下,它将是“英镑”和“欧元”。

我希望自己清楚,但如果没有,请告诉我。我在这里没有看到太多这样的问题,所以我希望这不是问题,我正在尝试讨论并找到解决我问题的最佳方法。我已经看到了这种货币转换的设计模式?它确实帮助我澄清了一些事情,但情况略有不同,所以我认为提出一个新问题是合理的。

4

2 回答 2

1

不完全是火箭科学,在转换时仍然需要额外的检查,如果尚未定义费率并且有改进的空间,但我相信它更面向对象并且你明白了。

如果您要使用专用转换器遵循 Marcelo 的建议,则currencyCache可以是 aMap<String, Converter>和 convert 方法,例如currencyCache.get(from+to).calculate(amount)

public class CurrencyConverter {
    static Map<String, Map<String, Double>> currencyCache = new HashMap<>();

    static {
        for (ConversionDefinition definition : ConversionDefinition.values()) {
            Map<String, Double> rates = currencyCache.get(definition.from);

            if (rates == null) {
                rates = new HashMap<>();
                currencyCache.put(definition.from, rates);
            }

            rates.put(definition.to, definition.rate);
        }
    }

    public static Double convert(String from, String to, Double amount) {
        return currencyCache.get(from).get(to) * amount;
    }

    public enum ConversionDefinition {
        EURO_TO_USD("euro", "usd", 10d),
        USD_TO_EUR("usd", "euro", 1 / 10d);

        private final String from;
        private final String to;
        private final Double rate;

        ConversionDefinition(String from, String to, Double rate) {
            this.from = from;
            this.to = to;
            this.rate = rate;
        }
    }
}
于 2013-09-25T17:39:46.400 回答
0

我很欣赏所有给出的建议。感谢他们,我自己提出了一个非常简单的解决方案,使用 HashMap。

我创建了一个基本上如下的类:

private Map currencyMap;

public CurrencyData() {
    currencyMap = new HashMap();
}

public void setCurrencyValue(String key, String value) {
    currencyMap.put(key, value);
}

public String getCurrencyValue(String key) {
    return currencyMap.get(key).toString();
}

在我的 Main 类上,当程序初始化时,我只需使用 Web 服务通过调用方法 setCurrencyValue 来填充哈希映射。

如果有人发现这种当前方法的任何缺陷,请告诉我,我仍然愿意接受建议。

于 2013-09-25T19:15:38.153 回答