发布于: 2022-11-14最后更新: 2022-11-15字数 1862阅读时长 5 分钟

type
Post
status
Published
date
Nov 14, 2022
slug
proxy-design-pattern-of-structural-pattern
summary
tags
代理
category
设计模式
icon
password
 

零、引言

 
  1. 在之前了解了设计模式中的创建型模式。创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。
    1. 单例模式用来创建全局唯一的对象。
    2. 工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象。
    3. 建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,“定制化”地创建不同的对象。
    4. 原型模式针对创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的。
  1. 现在开始进入另外一种类型的设计模式:结构型模式。结构型模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。
    1. 结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。、
 
先来第一个,代理模式:代理模式有不同的形式:
  • 静态代理
  • 动态代理:包括 JDK 代理、接口代理
  • Cglib 代理:可以在内存动态的创建对象,而不需要实现接口,他是属于动态代理的范畴
 

一、静态代理

 
实现步骤:
  1. 定义一个接口:TeacherDao
  1. 目标对象(被代理类) TeacherDaoImpl 实现类实现接口 TeacherDao
  1. 代理对象(代理类) TeacherDaoProxy 中也实现接口 TeacherDao
  1. 通过调用代理类来调用被代理类
 
 
使用:
 

二、动态代理

 
  • 代理类不需要实现接口,但是目标对象(被代理类)必须实现接口,否则不能用动态代理
  • 代理对象的生成,是利用 JDK 的 API,动态的在内存中构建代理对象
  • 动态代理也叫做:JDK 代理、接口代理
  • 代理类所在包:java.lang.reflect.Proxy
 
实现步骤:
 
 
使用:
 

三、Cglib 代理

 
静态代理和 JDK 代理模式都要求目标对象实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理,这就是 Cglib 代理。Cglib 代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展,有些书也将 Cglib 代理归属到动态代理。
 
Cglib 代理?
 
  • Cglib 是一个强大的高性能的代码生成包,它可以在运行期扩展 java 类与实现 java 接口它广泛的被许多 AOP 的 框架使用,例如 Spring AOP,实现方法拦截。
  • Cglib 包的底层是通过使用字节码处理框架 ASM 来转换字节码并生成新的类
  • 需要引入 Cglib 的依赖文件,在内存中动态构建子类,注意被代理的类不能为 final,否则报错,目标对象的方法如果为 final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法。
 
实现步骤:
 
 
使用:
 
 
 
 

Loading...
结构型模式之桥接设计模式

结构型模式之桥接设计模式


创建型模式之原型设计模式

创建型模式之原型设计模式