设计模式(1)

使用设计模式的目的:

为了让代码更 简洁 \ 易理解 \ 可靠 \ 易复用(高内聚\低耦合)

流程:

在这里插入图片描述

  1. 动态代理:

分为两种:
jdk动态代理:基于反射来实现功能的,反射的性能较差一点(
反射的性能怎样进行优化:(能不使用反射的地方就不使用反射)
1)使用第三方框架或者使用ssm框架
2)把反射获取的对像或者方法,有必要缓存的时候机型缓存一下,免得再次时用的时候,再次用反射的方式再次反射获取对象,来提升效率)
CGLIB动态代理:是基于字节码增强技术,来实现动态代理的

springboot不是用的jdk动态代理,而是用的是CGLIB动态代理 (比jdk动态代理性能更好,jdk底层基于反射,而CGLIB基于字节码增强技术,对自己饿吗操作)
spring的动态代理使用的是

CGLIB动态代理:
特点:

不要求对象必须要有借口,他可以为任何对象去做代理
(jdk动态代理必须要有接口,如果没有接口则无法生成代理对象)

用法介绍:

是方法之间的拦截,所以要实现一个MythodInterceptor,和jdk动态代理的方式差不多,实现一个接口*MythodInterceptor** 调用invoice方法
其中的参数:
①生成的代理对象
代理对象和被代理对象的区别:
1)被代理对象通过代理通过以它为基础,去生成一个代理对象;被作为基础
生成的那个东西就是代理对象
2)
②生成的原始的method方法
③方法的参数Object[] object
④MethodProxy代理方法
生成代理对象

参数展示在这里插入图片描述

测试需要的内容

在我们以后的开发中:定义了某一种业务不知道应该怎么去实现,只有在我们代码运行的时候才能知道用的是哪一种实现,我们可以使用动态代理最合适了
创建代理对象,
具体的什么实现,自己去写(自己写成什么实现,就是什么了,这样我们的代码就非常灵活了)

对一个类的代理:

当你调用一个类的一个方法的时候,这个方法在调用之前,在调用之后调用一串日志,(相当于对已有功能进行扩展)

使用场景:
为已有的方法进行功能增强(在不更改源代码的前提下增加一些功能),
动态的实现接口中的某一个方法

  1. 静态代理

需要被代理内部包有一个代理对象的实例
定义一个接口的话会更方便一点

  1. 原型模式

原型模式属于创建对象的(依赖的是object提供的clone方法,通过克隆方法去克隆一个对象)

一共有两种方式:①浅克隆②深客隆

特点:在大量创建复杂对象的时候性能会非常好
浅克隆:对于类内部的所有引用对象不做重新生成,只对外旁的对象去做生成
深客隆:是通过序列化,反序列化的方式,然后类内部的所有引用都会重新生成一遍

应用场景:(使用原型模式不会调用构造方法)

当你需要大量创建对象时,循环创建对象的场景下,使用原型模式,要比new的方式要好的多(依赖的是clone的方式进行克隆的,克隆是从内存中间赋值一份数据出来,复制的过程要比new 的过程要快new对象的过程是分配内存空间,开辟新的内存空间然后初始化,然后赋值,而赋值的过程会把这些过程省略,所以使用原型模式不会调用构造方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值