System Overview - Proxy pattern
The Proxy pattern provides a placeholder or surrogate for another object to control access to it. It is used to add additional functionality like access control, lazy loading, or logging without changing the original object's code.
Key requirements include controlling access to the real object, possibly delaying its creation, and adding extra behavior transparently.