Proxy pattern provides a surrogate or placeholder for another object to control access to it. The pattern has structural purpose and applies to objects.
- whenever there is a need for a more versatile or sophisticated reference to an object than a simple pointer