大家都知道设计模式有23种,但是每种的含义、实际的应用都很模糊。自己从16年4月从培训班出来工作就没有认真的理解过设计模式,都是拼了命的在做业务开发。所以成长的第一阶段就是先把23种设计模式好好理理。
设计模式的分三大类:
创建型模式
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为模式
策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
今天还学了反射,通过视频和百度的资料,简单总结一下什么是反射。官方的原话是:“Java反射指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制。
反射机制是破坏了JAVA面向对象开发原则的,当然我觉得是也是为了实际的应用而存在的,毕竟用到反射的地方很多。比如:
- JDBC驱动链接加载 class.forname("类的绝对路径")的方法
- IOC容器的注入
- 自定义注解(AOP+反射)
- 第三方框架
- 持久层的代码生成器
- 破解常用的单例方法(除了枚举,只是特例)
今天讲的是设计模式中的代理模式,其实工作中大家无形中都用到过这种模式的,只是以前我也不知道这叫就代理模式。代理模式主要分静态代理和动态代理。代理模式最核心的点就是对方法前后的业务(逻辑)进行增强处理,或者说统一处理。
代理模式的优点:减少代码冗余,提高代码复用性,安全性 隐藏真实角色、非侵入。
静态代理与动态代理
静态代理:也需要开发者自己编写代理类。这也是静态代理的缺点。
静态的实现方式:1.实现接口(Jdk实现)2通过继承模式(Cglib)
动态代理设计需要写代理,统一采用程序生成。动态代理最简单的理解就是我们不需要去写被代理层,而且程序自己生成。动态代理是在实现阶段不用关心代理类,而在运行阶段才指定哪一个对象。动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成 。
Jdk动态代理
JDK动态代理的一般步骤如下:
1.创建被代理的接口和类;
2.实现InvocationHandler接口,对目标接口中声明的所有方法进行统一处理;
3.调用Proxy的静态方法,创建代理类并生成相应的代理对象;
实现原理:利用拦截器机制必须实现InvocationHandler接口中的invoke方法实现对我们的目标方法增强。
---------------------------------------------------------------
今天就先总结到这里,下次继续写代理模式中CGLIB实现如果实现代理模式,为什么比JDK动态代理效率高。