Low Level Design
How the Proxy pattern adds access control, caching, logging, and lazy initialisation to objects without modifying their original class.