Preface: [ Mode Overview ] ---------- by xingoo
Intention mode
Proxy mode increases a proxy object for other objects, access control. Thus avoiding direct access to an object, resulting in reduced efficiency or the security.
Scenarios
1 Remote Agent for a remote object, creating a local proxy object. Every visit, direct access to local proxy object.
2 virtual agent , if the object is large, direct access to a large overhead, you can create a proxy object for him, only to generate critical information.
3 protection agency , to add a protective mechanism for an object, only by certain privileges to the proxy, the latter access to the object.
4 smart pointer , a bit like the inside of the C ++ smart pointers, operation of counting and destruction as a guideline. Avoid overhanging pointer and so on.
Mode structure
Subject specification class interface that defines the proxy class, the implementation class and the like.
interface Subject{
public void request();
}
RealSubject real object
class RealSubject implements Subject{
public void request() {
System.out.println("ConcreteSubject request()");
}
}
ProxySubject proxy class, you can add a similar decorative effect to achieve real part. Look! Much like AOP !
class ProxySubject implements Subject{
private RealSubject subject;
public void request() {
preRequest();
if(subject == null){
subject = new RealSubject();
}
subject.request();
postRequest();
}
public void preRequest(){
System.out.println("ConcreteSubject preRequest()");
}
public void postRequest(){
System.out.println("ConcreteSubject postRequest()");
}
}
All codes
1 package com.xingoo.Proxy;
2 interface Subject{
3 public void request();
4 }
5 class ProxySubject implements Subject{
6 private RealSubject subject;
7
8 public void request() {
9 preRequest();
10
11 if(subject == null){
12 subject = new RealSubject();
13 }
14 subject.request();
15
16 postRequest();
17 }
18
19 public void preRequest(){
20 System.out.println("ConcreteSubject preRequest()");
21 }
22
23 public void postRequest(){
24 System.out.println("ConcreteSubject postRequest()");
25 }
26 }
27 class RealSubject implements Subject{
28 public void request() {
29 System.out.println("ConcreteSubject request()");
30 }
31 }
32 public class Client {
33 public static void main(String[] args) {
34 Subject subject = new ProxySubject();
35 subject.request();
36 }
37 }
operation result
ConcreteSubject preRequest()
ConcreteSubject request()
ConcreteSubject postRequest()
Reproduced in: https: //my.oschina.net/u/204616/blog/545479