Расслоение повторяемой логики поверх методов (архитектура ООП)

Все 3 метода ниже должны выполнить проверку кэша (псевдокод):

public class Calculus
{
    private map<string, IntegralResult> _intCache;
    private map<string, DerivativeResult> _derCache;
    private map<string, decimal> _mulCache;

    public IntegralResult integrate(string func)
    {
        // result already cached?
        if (_intCache.contains(func)) return _intCache.get(func);

        // perform integration

        _intCache.put(func, result);
        return result;
    }

    public DerivativeResult derivative(string func)
    {
        // result already cached?
        if (_derCache.contains(func)) return _derCache.get(func);

        // perform derivative

        _derCache.put(func, result);
        return result;
    }

    /*  notice private  */
    private decimal multiply(decimal a, decimal b)
    {
        // result already cached?
        string key = (string)a + ";" + (string)b;
        if (_mulCache.contains(key)) return _mulCache.get(key);

        // perform multiplication

        _mulCache.put(key, result);
        return result;
    }
}

Какой лучший способ переписать этот класс? Я ищу подходящие шаблоны проектирования, которые можно использовать для наложения определенной логики поверх методов.

0 ответов

Другие вопросы по тегам