设计模式(十二)---代理模式

1、简介

  代理模式是对象的结构模式,代理模式给某个对象提供一个代理对象,并由代理对象控制对原对象的引用。

2、代理模式的分类

  2.1、按照目的分类:远程代理,虚拟代理,Copy-on-Write代理,保护代理,Cache代理,防火墙代理,同步化代理,智能引用代理。

  2.2、按照实现方式分类:动态代理和静态代理,其中,动态代理又分为jdk代理和cglib代理,这篇文章,只讨论静态代理,说明代理模式,动态代理以后再专门讨论

3、静态代理涉及到的角色

  3.1、抽象接口(Subject) : 需要被委托类和代理类实现。

  3.2、委托类(RealSubject):被代理的类,需要实现抽象接口。

  3.3、代理类(Proxy)   :需要实现抽象接口。

4、源代码

  4.1、抽象代理接口

package Proxy.StaticProxy;
/**
 * ********************************************************  
* @ClassName: Subject 
* @Description: 静态代理  抽象代理接口 需要被委托类和代理类实现
*  
**********************************************************
 */
public interface Subject {
    void request();
}

  4.2、委托类

package Proxy.StaticProxy;
/**
 * ********************************************************  
* @ClassName: RealSubject 
* @Description: 委托类角色 
*  
**********************************************************
 */
public class RealSubject implements Subject{

    @Override
    public void request() {
        System.out.println("RealSubject");
    }

}

  4.3、代理类

package Proxy.StaticProxy;
/**
 * ********************************************************  
* @ClassName: StaticProxy 
* @Description: 代理类角色 
*  
**********************************************************
 */
public class StaticProxy  implements Subject{
    private Subject subject;
    
    public StaticProxy(Subject subject) {
        this.subject = subject;
    }
    @Override
    public void request() {
        System.out.println("Begin");
        subject.request();
        System.out.println("End");
        
    }
    
}

  4.4、测试客户端

package Proxy.StaticProxy;
/**
 * ********************************************************  
* @ClassName: StaticProxyTest 
* @Description: 静态代理测试客户端
*  
**********************************************************
 */
public class StaticProxyTest {

    public static void main(String[] args) {
        
        Subject subject = new StaticProxy(new RealSubject());
        subject.request();
        
    }

}

5、测试,运行结果如下

6、总结

  一个委托类必须对应一个代理类,大量使用会照成代码臃肿。

原文地址:https://www.cnblogs.com/shun-gege/p/7508705.html