In general, we want to keep global state to a bare minimum because we want to enable unforeseen combinations at object-level. Caches can be built at a certain application level, but only if truly necessary.
Yes! Caches should be built by subclassing and combining objects.
Cheers, Alexandre