Contenu connexe
Similaire à Gang of four Proxy Design Pattern
Similaire à Gang of four Proxy Design Pattern (20)
Gang of four Proxy Design Pattern
- 1. Gang of Four – Proxy Design Pattern
http://idiotechie.com/?p=1112 November 12, 2012
0
Posted by IdioTechie on November 10, 2012
Descript ion:
Proxy is another Structural design pattern which works ‘on behalf of’ or ‘in place of’
another object in order to access the later.
ie. com
ech
When t o use t his pat t ern?
Proxy pattern is used when we need to create a wrapper to cover the main object’s complexity
ot
idi
from the client.
What are t he usage scenarios? //
Virtual Proxy – Imagine t
p:
tsituation where there is multiple database call to extract huge size
hexpensive operation we can possibly use the proxy pattern which
a
©
image. Since this is an
would create multiple proxies and point to the huge size memory consuming object for
further processing. The real object gets created only when a client first requests/accesses
the object and after that we can just refer to the proxy to reuse the object. This avoids
duplication of the object and hence saving memory.
Remote Proxy – A remote proxy can be thought about the stub in the RPC call. The remote
proxy provides a local representation of the object which is present in the different address
location. Another example can be providing interface for remote resources such as web
service or REST resources.
Protective Proxy – The protective proxy acts as an authorisation layer to verify if the actual
user has access to appropriate content. An example can be thought about the proxy server
which provides restrictive internet access in office. Only the websites and contents which are
valid will be allowed and the remaining ones will be blocked.
Smart Proxy – A smart proxy provides additional layer of security by interposing specific
actions when the object is accessed. An example can be to check if the real object is locked
before it is accessed to ensure that no other object can change it.
St ruct ure:
Part icipant s:
- 2. Part icipant s:
Subject – This object defines the common
interface for RealSubject and Proxy so that a
Proxy can be used anywhere a RealSubject is
expected.
Proxy – It maintains a reference to the
RealSubject so that Proxy can access it. It also
implements the same interface as the
RealSubject so that Proxy can be used in place
of RealSubject. Proxy also controls the access
to the RealSubject and can create or delete
ie. com
ech
this object.
iot
RealSubject – This refers the main object
//id
which the proxy represents. Proxy Design Pattern Structure
Example:
ht tp: article. The first one will be virtual proxy pattern and the other
We will discuss two examples in this
one for protection proxy pattern.
Virtual Proxy Example:©
As mentioned earlier virtual proxy is useful to save expensive memory resources. Let’s take a
scenario where the real image contains a huge size data which clients needs to access. To save
our resources and memory the implementation will be as below:
Create an interface which will be accessed by the client. All its methods will be implemented
by the ProxyImage class and RealImage class.
RealImage runs on the different system and contains the image information is accessed from
the database.
The ProxyImage which is running on a different system can represent the RealImage in the
new system. Using the proxy we can avoid multiple loading of the image.
Class Diagram:
Code Example:
Image.java
public interface Image {
public void showImage();
}
RealImage.java
Virtual Proxy Example
- 3. public class RealImage implements Image {
private String fileName = null;
public RealImage(String strFileName){
this.fileName = strFileName;
}
@Override
public void showImage() {
System.out.println(" Show Image:" +fileName);
}
com
}
ie.
ProxyImage.java
ot ech
:// idi
public class ProxyImage implements Image {
ttp
private RealImage img= null;
h
private String fileName = null;
public ProxyImage(String strFileName) {
©
this.fileName = strFileName;
}
/*
* (non-Javadoc)
* @see com.proxy.virtualproxy.Image#showImage()
*/
@Override
public void showImage() {
if(img == null){
img = new RealImage(fileName);
}
img.showImage();
}
}
Client.java
public class Client {
public static void main(String[] args) {
final Image img1 = new ProxyImage(" Image***1" );
final Image img2 = new ProxyImage(" Image***2" );
img1.showImage();
img2.showImage();
}
}
Protection Proxy Example:
Let’s assume that company ABC starts a new policy that employees will now be prohibited
internet access based on their roles. All external emails websites will be blocked. In such
- 4. situation we create InternetAccess interface which consists of operation
grantInternetAccess().
The RealInternetAccess class which allows of internet access for all. However to restrict this
access we will use ProxyInternetAccess class which will check user’s role and grant access
based on their roles.
Class Diagram:
Code Example:
InternetAccess:
ie. com
public interface InternetAccess {
ot ech
idi
public void grantInternetAccess();
}
://
RealInternetAccess.java h ttp
©
Protection Proxy Example
public class RealInternetAccess implements InternetAccess {
private String employeeName = null;
public RealInternetAccess(String empName) {
this.employeeName = empName;
}
@Override
public void grantInternetAccess() {
System.out.println(" Internet Access granted for employee: "
+ employeeName);
}
}
ProxyInternetAccess.java
public class RealInternetAccess implements InternetAccess {
private String employeeName = null;
public RealInternetAccess(String empName) {
this.employeeName = empName;
}
@Override
public void grantInternetAccess() {
System.out.println(" Internet Access granted for employee: "
+ employeeName);
}
}
- 5. Client.java
public static void main(String[] args) {
InternetAccess ia = new ProxyInternetAccess(" Idiotechie" );
ia.grantInternetAccess();
}
Benef it s:
om
cseen in the above example is about
security.
ch ie.
One of the advantages of Proxy pattern as you have
t ewhich might be huge size and memory intensive.
id ioof the application.
This pattern avoids duplication of objects
This in turn increases the performance
//about security by installing the local code proxy (stub) in the
ht tp: the server with help of the remote code.
The remote proxy also ensures
client machine and then accessing
©
Drawbacks/Consequences:
This pattern introduces another layer of abstraction which sometimes may be an issue if the
RealSubject code is accessed by some of the clients directly and some of them might access the
Proxy classes. This might cause disparate behaviour.
Int erest ing point s:
There are few differences between the related patterns. Like Adapter pattern gives a
different interface to its subject, while Proxy patterns provides the same interface from the
original object but the decorator provides an enhanced interface. Decorator pattern adds
additional behaviour at runtime.
Proxy used in Java API: java.rmi.*;
Please don’t forget to leave your comments. In case you like this article please share this articles
for your friends through the social networking links.
Download Sample Code:
Filed in: Core Java, Design Pattern, Java, Random Tags: design pattern, download, gang of,
gang of four, GoF, idiotechie, Java, protection proxy, Proxy, proxy design pattern, remote proxy,
smart proxy, virtual proxy