Proxy means ‘in place of’. In attendance roll call, we give proxy for our friends in college right? ‘Representing’ or ‘in place of’ or ‘on behalf of’ are literal meanings of proxy and that directly explains proxy design pattern. It is one of the simplest and straight forward design pattern.

Intent :Provide a surrogate or placeholder for another object to control access to it.Use an extra level of indirection to support distributed, controlled, or intelligent access.Add a wrapper and delegation to protect the real component from undue complexity.

Problem :You need to support resource-hungry objects, and you do not want to instantiate such objects unless and until they are actually requested by the client.

Possible Usage Scenarios :Remote Proxy – Represents an object locally which belongs to a different address space. Think of an ATM implementation, it will hold proxy objects for bank information that exists in the remote server. RMI is an example of proxy implmenetation for this type in java.Virtual Proxy – In place of a complex or heavy object use a skeleton representation. When an underlying image is huge in size, just represent it using a virtual proxy object and on demand load the real object. You feel that the real object is expensive in terms of instantiation and so without the real need we are not going to use the real object. Until the need arises we will use the virtual proxy.Protection Proxy – Are you working on a MNC? If so, you might be well aware of the proxy server that provides you internet. Saying more than provides, the right word is censores internet. The management feels its better to censor some content and provide only work related web pages. Proxy server does that job. This is a type of proxy design pattern. Smart Reference – Just we keep a link/reference to the real object a kind of pointer.

Structure

By defining a Subject interface, the presence of the Proxy object standing in place of the RealSubject is transparent to the client.

Discussion :Design a surrogate, or proxy, object that: instantiates the real object the first time the client makes a request of the proxy, remembers the identity of this real object, and forwards the instigating request to this real object. Then all subsequent requests are simply forwarded directly to the encapsulated real object.

There are four common situations in which the Proxy pattern is applicable.A virtual proxy is a placeholder for “expensive to create” objects. The real object is only created when a client first requests/accesses the object.A remote proxy provides a local representative for an object that resides in a different address space. This is what the “stub” code in RPC and CORBA provides.A protective proxy controls access to a sensitive master object. The “surrogate” object checks that the caller has the access permissions required prior to forwarding the request.A smart proxy interposes additional actions when an object is accessed. Typical uses include:

Important Points:A proxy may hide information about the real object to the client.A proxy may perform optimization like on demand loading.A proxy may do additional house-keeping job like audit tasks.Proxy design pattern is also known as surrogate design pattern.

Check list :Identify the leverage or “aspect” that is best implemented as a wrapper or surrogate.Define an interface that will make the proxy and the original component interchangeable.Consider defining a Factory that can encapsulate the decision of whether a proxy or original object is desirable.The wrapper class holds a pointer to the real class and implements the interface.The pointer may be initialized at construction, or on first use.Each wrapper method contributes its leverage, and delegates to the wrappee object.

Rules of thumb :Adapter provides a different interface to its subject. Proxy provides the same interface. Decorator provides an enhanced interface.Decorator and Proxy have different purposes but similar structures. Both describe how to provide a level of indirection to another object, and the implementations keep a reference to the object to which they forward requests.