模式的秘密---代理模式

 

模式的秘密---代理模式_第1张图片

  • 代理模式基本概念及分类

  • 了解代理模式开发中应用场景

  • 掌握代理模式实现方式

  • 理解JDK动态代理实现

 

  1. 代理模式基本概念

  2. 代理模式定义

  3. 为其他对象提供一种代理以控制这个对象的访问

  4. 举例子说明 火车购票

  5. 买火车票的几大途径

  6. 去车站售票处直接购票 

  7. 代售网点购票

 

火车票代售处是火车站的代理

代理模式定义:为其他对象提供一种代理以控制对这个对象的访问。代理对象起到中介作用,可去掉功能服务或增加额外的服务

 

常见的几种代理模式

远程代理:为不同地理的对象提供局域网代表对象(通过远程代理可以加快各个地铺使之能直观的了解店内信息)

 

虚拟代理:根据需要将资源消耗很大的对象进行延迟真正需要的时候进行创建

 

保护代理:控制用户的访问权限

 

智能引用代理:提供对目标对象额外服务

 

两种实现方式

静态代理

动态代理

 

代理模式实现-静态代理

静态代理:代理和被代理对象在代理之前是确定的。他们都实现相同的接口或者继承相同的抽象类

模式的秘密---代理模式_第2张图片

 

思考

通过继承和聚合两种方式都能实现代理,但究竟哪种更好呢?

 

静态代理实战-两种实现

模式的秘密---代理模式_第3张图片

 

模式的秘密---代理模式_第4张图片

 

 

动态产生代理,实现对不同类,不同方法的代理

动态代理

JDK动态代理

 

模式的秘密---代理模式_第5张图片

 

所谓Dynamic Proxy是这样一种class:

它是在运行时生成的class

该class需要实现一组interface

使用动态代理类时,必须实现InvocationHandler接口

 

动态代理实现步骤

  1. 创建一个实现接口InvocationHandler的类,它必须实现invoke方法

  2. 创建被代理的类以及接口

  3. 调用Proxy的静态方法,创建一个代理类

    newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h)

  4. 通过代理调用方法

 

JDK动态代理与CGLIB动态代理区别

JDK动态代理

  1. 只能代理实现了接口的类

  2. 没有实现接口的类不能实现JDK的动态代理

CGLIB动态代理

  1. 针对类来实现代理的

  2. 对指定目标类产生一个子类,通过方法拦截技术拦截所有父类方法的调用。

 

总结

1.代理概念、分类及应用场景

 

模式的秘密---代理模式_第6张图片

 

2.静态代理(继承、聚合)

3.JDK动态代理实现日志处理功能

     -产生动态代理不仅可以使用jdk动态代理,也可以使用其他的方式,如cglib。

4.模拟JDK动态代理实现

模式的秘密---代理模式_第7张图片

(完)

java经验总结

 

java知识和技术查漏补缺,空余时间学习碎片化知识,分享开发、运维、架构等综合性知识,助力职场最后一公里与职业进阶,每天看总结,就选它。

 

你可能感兴趣的:(学习)