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