The Proxy pattern provides a surrogate or placeholder for another object to control access to it, useful for lazy loading, caching, access control, and logging.
The Proxy pattern creates a representative object that controls access to another object, which may be remote, expensive to create, or in need of security. This pattern is valuable for lazy loading of heavy resources, caching results, controlling access permissions, and adding logging or monitoring without modifying the original object [citation:1].