最近在学习的是过滤器,在处理网页的中文乱码问题的时候,用到的是在doFilter中用的是一个包装类,进行对getParamter ()方法的重写,然后就想着进行可以增强对象方法的方式进行一个总结,好吧,废话不多说
第一种是继承
子类继承父类,直接对方法进行重写, 这种应该都懂
第二种 ,动态代理
动态代理,主要是通过Proxy 与InvocationHandler 两个接口进行处理,并同时利用了反射
在创建代理对象的时候,可以有两种方式,一种是通过Proxy的静态方法 getProxyClass(参数1,参数2)是生成一个代理类,但是其实在后期实例化对象的时候,还是需要一个InvocationHandler的实例对象,因为他是一个调用处理程序的接口,里面的invoke的方法,里面可以实现方法的增强
在者可以直接建立一个代理实例对象,用Proxy的静态方法getProxyInstance(参数1,参数2,参数3);
参数一,是要被代理的类加载器,
参数二, 要实现的所有的接口的数组Class[]
参数三 ,就是一个InvocationHandler的实例化对象 该对象也有三个参数,依次是:代理对象,方法,参数数组Object[]
扩展:面向切面编程AOP中的AOP代理,后期在介绍
第三种 装饰者模式
1.就是增强类与被增强类要实现同一个接口
2.被增强类作为参数放在增强类中作为参数,然后在增强类中定义一个成员变量,把参数即被增强类的实例化对象通过构造方法传给增强类,此时,该类就具备了被增强类的所有的方法及属性,
3, 然后在类中,可以选择是否对被增强类的方法进行重写
总结:
为什么
使用对方法的增强,可以降低代码之间的耦合性,在后期的代码处理的时候,可以不用动之前定义好的代码,可以更好的对数据的维护,
继承与装饰者模式的区别,
继承 是直接成为他的子类,继承体系可能会造成臃肿,扩展性不好,类与类之间的耦合性增高,继承只能单继承,
装饰者模式 是直接把该类的实例化对象作为参数传入 ,在后期的维护中,因为耦合性的不高,可以不修改源代码。直接进行修改和增强,会非常方便,可以传入多个实现类对象
最后: 哈哈哈哈,哪里有错的记得提醒下小仙,修仙路漫漫,来日方长,我要去跑步了。。。
后续.........
---恢复内容结束---