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(); } }