### **Proxy Pattern**
**Description:**
The Proxy Pattern provides a surrogate or placeholder for another object to
control access to it. It can add additional functionality whenever an object is
accessed, such as lazy initialization, logging, access control, or caching.
**How and When to Use It:**
- **When to Use:** Use the Proxy Pattern when you need to control access to an
object or when you want to add functionality before or after the object's
methods are invoked without changing the object itself.
- **Example:** In an image viewer application, a proxy can be used to load
high-resolution images on demand (lazy loading), displaying a placeholder until
the image has been fully loaded.