一、基本概念。
1、代理模式(Proxy),有动态代理与静态代理
2、角色分析:
A:Subject:抽象主题角色:可以是抽象类,也可以是接口。抽象主题是一个普通的业务类型,无特殊要求。
B:RealSubject:具体主题角色:也叫做被委托角色或被代理角色,是业务逻辑的具体执行者。
C:Proxy: 代理主题角色:也叫做委托类或代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后处理工作。
D:Client:测试使用
二、简单例子
A:Subject:
1 package comm.pattern.struct.proxy; 2 3 /** 4 * 5 * @Title: Subject.java 6 * @Package: comm.pattern.struct.proxy 7 * @Description: 接口 8 * @author yangzhancheng 9 * @2020年3月17日:下午1:56:01 10 * 11 */ 12 public interface Subject { 13 void request(); 14 }View Code
B:RealSubject:
1 package comm.pattern.struct.proxy; 2 3 /** 4 * 5 * @Title: RealSubject.java 6 * @Package: comm.pattern.struct.proxy 7 * @Description: 描述对象 8 * @author yangzhancheng 9 * @2020年3月17日:下午1:56:15 10 * 11 */ 12 public class RealSubject implements Subject { 13 14 @Override 15 public void request() 16 { 17 System.out.println("访问真实的IP:10.10.10.110"); 18 } 19 }View Code
C:Proxy:
1 package comm.pattern.struct.proxy; 2 3 /** 4 * 5 * @Title: Proxy.java 6 * @Package: comm.pattern.struct.proxy 7 * @Description: 代理对象 8 * @author yangzhancheng 9 * @2020年3月17日:下午1:58:15 10 * 11 */ 12 public class Proxy implements Subject { 13 14 private RealSubject realSubject; 15 16 public void request() { 17 if (realSubject == null) { 18 realSubject = new RealSubject(); 19 } 20 preRequest(); 21 realSubject.request(); 22 postRequest(); 23 } 24 25 public void preRequest() { 26 System.out.println("代理地址为:www.yangzhan.com"); 27 } 28 29 public void postRequest() { 30 System.out.println("代理把访问真实地址后的信息做处理返送给客户。"); 31 } 32 33 }View Code
D:Client:
1 package comm.pattern.struct.proxy; 2 3 /** 4 * 5 * @Title: Client.java 6 * @Package: comm.pattern.action.templateMethod 7 * @Description: 描述该文件做什么 8 * @author yangzhancheng 9 * @2020年3月1日:下午4:47:17 10 * 11 */ 12 public class Client { 13 14 public static void main(String[] args) { 15 16 Proxy proxy = new Proxy(); 17 proxy.request(); 18 19 } 20 21 }View Code
运行结果
代理地址为:www.yangzhan.com 访问真实的IP:10.10.10.110 代理把访问真实地址后的信息做处理返送给客户。
三、总结
1、代理与装饰模式区别
A、使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。
B、让别人帮助你做你并不关心的事情,叫代理模式。
C、为让自己的能力增强,使得增强后的自己能够使用更多的方法,拓展在自己基础之上的功能的,叫装饰器模式
D、他们都实现的是同一个接口。
2、动态代理:后续补充
3、代理的源代码分析,后续补上。