В случае функциональной прозрачности можно легко избежать этих дополнительных накладных расходов. Одно из стандартных решений — мемоизация (memoization) — добавление к методу адаптера для кэширования (например, в структуре HashMap). Во-первых, этот адаптер будет обращаться к кэшу и проверять, не содержится ли там уже пара «аргумент, результат». Если да, он сразу возвращает сохраненный результат. В противном случае вызывается метод computeNumberOfNodes, но перед возвратом из адаптера новая пара «аргумент, результат» сохраняется в кэше.
Современный язык Java. Лямбда-выражения, потоки и функциональное программирование
·
Алан Майкрофт