The idea of a factor is a component of logical design that can be treated independently of the rest of the design
or at least relatively so
Cache is one such factor.
Example A compiler is an interpreter with a cache. Logically the design can be factored as an interpreter coupled with a method for caching.
But Most compilers are not designed that way.
Example DNS name resolution uses a distributed cache. Logically the design can be factored as a method for relaying requests coupled with a method for caching.
Example Dynamic programming is recursion with a cache. Logically
(this is getting a bit repetitive) But Most textbooks on algorithms don't describe it that way.
Example LazyEvaluation can be 'derived' from Strict
Evaluation
by adding a cache.
"the runtime overhead consists of: allocating and initializing an object, making a method call to trigger the calculation, testing for a cached result and caching the result if needed"
Help! Which design patterns is this related to?
It's an OptimizationPattern... CacheCalculations.
Advantages
A cache can often be added as an afterthought to an algorithm
that runs too slowly. This optimisation is commonly called memoisation (or
MemoIzation in the US :-)
Things to consider
Using a
HashTable. Cache element expiry. Use of random expiry can make chance of worst case behaviour negligible.
See also:
MemoizationInPython
CategoryOptimization FactorOptimization