Расслоение повторяемой логики поверх методов (архитектура ООП)
Все 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;
}
}
Какой лучший способ переписать этот класс? Я ищу подходящие шаблоны проектирования, которые можно использовать для наложения определенной логики поверх методов.