Emove

  • 首页
  • 归档
  • 分类
  • 标签

  • 搜索
context 反射 channel LRU BeanDefinition JVM 装饰者模式 MyBatis 快慢指针 归并排序 链表 hash表 栈 回溯 贪心 主从复制 二分查找 双指针 动态规划 AOF RDB 规范 BASE理论 CAP B树 RocketMQ Sentinel Ribbon Eureka 命令模式 访问者模式 迭代器模式 中介者模式 备忘录模式 解释器模式 状态模式 策略模式 职责链模式 模板方法模式 代理模式 享元模式 桥接模式 外观模式 组合模式 适配器模式 建造者模式 原型模式 工场模式 单例 UML 锁 事务 sql 索引

代理模式

发表于 2020-04-04 | 分类于 设计模式 | 20 | 阅读次数 140

代理模式

基本介绍

  1. 代理模式:为一个对象提供一个替身,以控制这个对象的访问。即通过代理对象访问目标对象。这样的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能
  2. 被代理的对象可以是远程对象,创建开销大的对象或者需要安全控制的对象
  3. 代理模式有不同的形式:静态代理,动态代理(JDK代理、接口代理)和Cglib代理(可以在内存中动态创建对象,不需要实现接口,属于动态代理的范畴)

静态代理

基本介绍

​ 静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者继承相同的父类

优缺点:

  1. 优点:在不修改目标对象的功能的前提下,能通过代理对象的目标功能对目标功能扩展
  2. 缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类
  3. 一旦接口增加方法,目标对象与代理对象都要维护

动态代理

基本介绍

  1. 代理对象,不需要实现接口,但是目标对象要实现接口,否则不能用动态代理
  2. 代理对象的生成,是利用JDK的API,动态的在内存中构建对象
  3. 动态代理也叫 :JDK代理,接口代理

Cglib代理

基本介绍

  1. 静态代理和JDK代理模式都要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理,这就是Cglib代理
  2. Cglib代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能的扩展,有些书也将其归属为动态代理
  3. Cglib是一个强大的高性能的代理生成包,他可以在运行期扩展Java类与实现Java接口,他广泛的被许多AOP框架使用,例如Spring-AOP,实现方法拦截
  4. 在AOP编程中如何选择代理模式
    1. 目标对象需要实现接口,使用JDK代理
    2. 目标对象不需实现接口,使用Cglib代理
  5. Cglib包底层是用过使用字节码处理框架ASM来转换字节码并生成新的类
  6. 被代理的类不能被final、static修饰

代理模式的变体

  1. 防火墙代理

    内网通过代理穿透防火墙,实现对公网的访问

  2. 缓存代理

    比如:当请求图片文件等资源时,先到缓存代理取,如果取到资源则OK,如果取不到资源,再到公网或者数据库获取,然后缓存

  3. 远程代理

    远程对象的本地代表,通过它把远程对象当本地对象来调用,远程代理通过网络和真正的远程对象沟通信息

  4. 同步代理

    主要使用在多线程编程中,完成多线程间同步工作

# context # 反射 # channel # LRU # BeanDefinition # JVM # 装饰者模式 # MyBatis # 快慢指针 # 归并排序 # 链表 # hash表 # 栈 # 回溯 # 贪心 # 主从复制 # 二分查找 # 双指针 # 动态规划 # AOF # RDB # 规范 # BASE理论 # CAP # B树 # RocketMQ # Sentinel # Ribbon # Eureka # 命令模式 # 访问者模式 # 迭代器模式 # 中介者模式 # 备忘录模式 # 解释器模式 # 状态模式 # 策略模式 # 职责链模式 # 模板方法模式 # 代理模式 # 享元模式 # 桥接模式 # 外观模式 # 组合模式 # 适配器模式 # 建造者模式 # 原型模式 # 工场模式 # 单例 # UML # 锁 # 事务 # sql # 索引
享元模式
模板方法模式
  • 文章目录
  •   |  
  • 概览
林亦庭

林亦庭

less can be more

87 文章
11 分类
54 标签
RSS
Github
Creative Commons
© 2021 林亦庭
粤ICP备20029050号