newInstance();方法
代理的作用:在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象;
代理的步骤:
Java中有多种动态代理技术,JDK/CGLIB/Javassist/ASM,其中JDK和CGLIB两种动态代理最常用;
Spring常用JDK和CGLIB,而Mybatis还使用了Javassist,无论哪种代理其技术,理念都是相似的;
JDK动态代理中,必须使用接口,而CGLIB不需要,所以使用CGLIB会更简单一些;
建立代理对象和真实服务对象的关系一共分为两步;
首先要实现代理逻辑类必须实现java.lang.reflect.InvocationHandler接口,它里面定义了一个invoke()方法,并提供接口数组用于下挂代理对象;
不需要提供接口,只要一个非抽象类就能实现动态代理;
二者相似,都是用getProxy();方法生成代理对象,制定代理的逻辑类;
代理逻辑类要实现一个接口的一个方法,这个接口定义的方法就是代理对象的逻辑方法,可以控制真实对象的方法;
开发者只要知道拦截器接口的方法,含义和作用即可,无须知道动态代理是怎么实现的;
JDK动态代理实现一个拦截器的逻辑,先定义拦截器接口Interceptor;
可以进一步简化动态代理的使用方法,使程序变得更加简单;
当一个对象在一条链上被多个拦截器拦截处理时,就被称为责任链模式;
可以在传递链上加入新的拦截器,增加拦截逻辑;
缺点是会增加代理和反射,代理和反射的性能不高;
又被称为发布订阅模式,是对象的行为模式;
一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生变化时,会通知所有观察者,并让其自动更新自己;
观察者模式要同时存在观察者和被观察者双方,观察者可以是多个;在Java中,需要去继承java.util.Observable类;
作为观察者还需实现java.util.Observer接口的update方法;
大部分情况我们都以new关键字来创建对象;
比如现实中车子的种类很多,有大巴车,轿车,救护车,越野车,卡车等.每个种类下面还有具体的型号.一个工厂生产如此多的车会难以管理,
所以往往还需要进一步拆分为各个分工厂:大巴车,轿车等分工厂.但是客户不需要知道工厂是如何拆分的,他只会告诉客服需要什么车,客服会根据客户的需要找到对应的工厂去生产车.
对客户而言,车厂只是一个抽象概念,他只是大概知道有这样一个工厂能满足他的需求;
抽象工厂模式可以向客户端提供一个接口,使得客户端不必指定产品的具体情况,创建多个产品族中的产品对象;
建造者模式属于对象的创建模式;将一个产品的内部表象(属性)与产品的生成过程分割开来,从而使一个建造过程生成具有不同内部表象的产品对象;
分步构建对象模式;
用一个配置类对内部表象进行统筹,然后将所有信息交由构造器来完成对象创建;
动态代理和责任链模式是重点,尤其是Spring和MyBatis;