This document discusses the proxy pattern. The proxy pattern provides a surrogate or placeholder for another object to control access to it. There are different types of proxies like remote proxies, virtual proxies, and protection proxies. A proxy maintains a reference to the real subject and presents the same interface to control access and optionally perform additional tasks when the subject is accessed.