应用设计模式来设置和获取货币的矩阵值

时间:2013-09-25 16:55:57

标签: java design-patterns matrix currency

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

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

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

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

我希望能够为任何一个需要使用此服务的类提供更抽象的东西并获得这些值。像另一个类调用方法只是发送两个字符串和相同的方法将返回任何货币汇率,这取决于收到的字符串。在这种情况下,它将是" pound"和" euro"。

我希望自己明白,但如果没有,请告诉我。 我在这里没有看到很多这样的问题,所以我希望这不是问题,我正在努力讨论并找到解决问题的最佳方法。 我已经看过这个design patterns for currency conversion?,它确实帮助我澄清了一些事情,但情况略有不同,所以我认为提出一个新问题是合理的。

2 个答案:

答案 0 :(得分:1)

不完全是火箭科学,转换时仍然需要额外的检查,如果费率尚未定义且有改进的余地,但我相信它更加面向对象并且你能得到图片。

如果您使用专用转换器跟随Marcelo的建议,currencyCache可能是Map<String, Converter>,转换方法类似于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;
        }
    }
}

答案 1 :(得分: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来填充哈希映射。

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