0

Web サービスを使用して、4 つの異なる通貨の為替レートを取得しています。これまでのところ、これらのレートを取得して 4x4 マトリックスに格納し、毎回 Web サービスを使用しなくても任意の値を簡単に取得できるようにしています。

私が知りたいのは、このマトリックスの値を設定および取得するために設計パターン (およびどのパターンがより適切であるか) を使用する最善のアプローチです。私は現在、次のようなものを使用しています:

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

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

私が望んでいたのは、このサービスを使用してこれらの値を取得する必要があるクラスに対して、より抽象的なものを用意することです。2 つの文字列を送信するだけのメソッドを呼び出す別のクラスのようなもので、同じメソッドは受信した文字列に応じて任意の通貨レートを返します。この場合、「ポンド」と「ユーロ」になります。

私は自分自身を明確にしたいと思っていますが、そうでない場合はお知らせください. 私はここでこのような質問をあまり見たことがないので、これが問題ではないことを願っています. 通貨換算のこの設計パターンを既に見たことがありますか? それは私にとって何かを明確にするのに役立ちましたが、状況は少し異なるので、新しい質問をするのは合理的だと思いました.

4

2 に答える 2

1

正確にはロケット科学ではありませんが、レートがまだ定義されておらず、改善の余地がある場合は、変換時に追加のチェックが必要ですが、もう少しオブジェクト指向であり、全体像が得られると思います。

専用のコンバーターで Marcelo の提案に従う場合、 はcurrencyCacheaMap<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 に答える