[Design Mode] - Proxy mode Proxy

  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 }
View Code

  operation result

ConcreteSubject preRequest()
ConcreteSubject request()
ConcreteSubject postRequest()

 

Reproduced in: https: //my.oschina.net/u/204616/blog/545479

Guess you like

Origin blog.csdn.net/weixin_34378922/article/details/91989416