设计模式——代理模式

70 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

本文仅以笔记功能为主

一、代理模式

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式的优点: 1、职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

2、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。

3、高扩展性

在这里插入图片描述

1、链接: Graphic Design Patterns.
2、链接: 菜鸟教程-代理模式.
3、《大话设计模式》

二、动态代理

代理模式分为两类:静态代理、动态代理。
动态代理的优点:

  • 静态代理只针对某个特定的业务进行实现,接口中增加新的方法后,相应的实体类、代理类都要实现此方法,这会造成代码越来越复杂,而动态代理没有此问题。
  • 在动态代理中,接口中声明的所有方法都被放到了调用处理器中一个集中的方法处理(InvocationHandler.invoke() ),这样的话,在接口新增方法后,不必像静态代理那样全部实体类和代理类都实现一遍。

对于Java来说,动态代理的一个典型应用是:Spring AOP
Spring AOP的动态代理有两种实现方式,分别为:

  • JDK
  • CGLib

对这二种实现方法进行区别分析:

  • JDK的动态代理机制只能代理实现了接口的类;CGLib是采用继承机制针对类来实现代理的,继承回调。
  • CGLib不能对final修饰的类代理,因为final修饰的类不能被继承
  • 在JDK1.8后,JDK效率高于CGLib。(可能是因为CGLib到底是第三方的)

1、百战Spring笔记
2、尚硅谷Spring笔记