The Proxy pattern provides a surrogate or placeholder for another object to control access to it. A proxy object offers the same interface as the target object and interacts with the target object on behalf of a client object, taking care of communication details. Proxy objects are useful when the target object is remote, expensive to create, or access needs to be controlled. Common proxy types include remote, virtual, and protection proxies.