引言:让我们重温经典,致敬经典
代理模式:为其他对象提供一种代理以控制对这个对象的访问
UML:
解读:代理模式要求代理者和被代理者实现同一个接口或者继承自同一个父类。并且代理者要持有真实对象的引用。
所以代理者和被代理者之间的关系应该是关联关系。
代码:
1 package com.dzf.designtest; 2 3 /** 4 * <desc> 5 * 代理模式:为其他对象提供一种代理以控制对这个对象的访问 6 * 7 * </desc> 8 * @author dingzf 9 * @date 2018/4/1 10 * @time 17:56 11 */ 12 public class ProxyDemo { 13 //客户端调用 14 public static void main(String[] args) { 15 Proxy proxy = new Proxy(); 16 proxy.print(); 17 } 18 } 19 abstract class Subject{ 20 public abstract void print(); 21 } 22 class RealSubject extends Subject{ 23 @Override 24 public void print() { 25 System.out.println("我是真实的对象1"); 26 } 27 } 28 class Proxy extends Subject{ 29 private Subject subject; 30 31 @Override 32 public void print() { 33 if(subject == null){ 34 subject = new RealSubject(); 35 } 36 subject.print();//执行真实对象的方法或者行为 37 } 38 }
对于客户端来说,无需知道真实对象(RealSubject),只需要知道代理者即可。
要点:代理者和被代理者实现同一个接口,或者继承自同一个父类,代理者持有被代理者的引用。
体现:jdk的动态代理
我们知道jdk的动态代理只能代理接口不能代理类。代理类的要使用cglib动态代理,有兴趣的可以自己去找找相关的资料了解了解。这里就不再说这个,毕竟不是我们的重点。