由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
代理模式的主要优点有:
其主要缺点是:
代理模式的主要角色如下。
代理模式的结构如下所示:
根据代理的创建时期,代理模式分为静态代理和动态代理。
代理模式的实例代码如下:
(1) 首先定义抽象主题
// 抽象主题 public interface Subject { void request(); }
(2) 真实主题和代理类都实现同一个接口,抽象主题
// 真实主题 public class RealSubject implements Subject{ @Override public void request() { System.out.println("访问真实主题方法..."); } } // 代理类 public class Proxy implements Subject{ private RealSubject realSubject; @Override public void request() { if (realSubject == null){ realSubject = new RealSubject(); } preRequest(); realSubject.request(); postRequest(); } public void preRequest() { System.out.println("访问真实主题之前的预处理。"); } public void postRequest() { System.out.println("访问真实主题之后的后续处理。"); } }
(3) 测试类代码如下
public class Main { public static void main(String[] args) { Subject subject = new Proxy(); subject.request(); } }
输出结果如下:
访问真实主题之前的预处理。
访问真实主题方法...
访问真实主题之后的后续处理。
静态代理和动态代理的内容在javaSe中已经有整理过参考:03、Java进阶--代理模式