设计模式面试知识点(干货)(2)
导读: 9.代理模式 代理对象与目标对象.代理对象是对目标对象的扩展"并会调用目标对象 不要随意去修改别人已经写好的代码或者方法"如果需改修改"可以通过代
丝瓜网小编提示,记得把"设计模式面试知识点(干货)(2)"分享给大家!
9.代理模式 代理对象与目标对象.代理对象是对目标对象的扩展"并会调用目标对象 不要随意去修改别人已经写好的代码或者方法"如果需改修改"可以通过代理的方式来扩展该方法
静态代理:编译期加入
<1.可以做到在不修改目标对象的功能前提下"对目标功能扩展.
<2.因为代理对象需要与目标对象实现一样的接口"所以会有很多代理类"类太多.同时"一旦接口增加方法"目标对象与代理对象都要维护.
动态代理(JDK代理"接口代理): *代码 目标对象一定要实现接口 反射,运行时动态加入
Cglib代理(子类代理):在内存中构建一个子类对象从而实现对目标对象功能的扩展
<1.需要引入cglib的jar文件"但是Spring的核心包中已经包括了Cglib功能"所以直接引入pring-core-3.2.5.jar即可.
<3.代理的类不能为final"否则报错
<4.目标对象的方法如果为final/static"那么就不会被拦截"即不会执行目标对象额外的业务方法.
在Spring的AOP编程中:如果加入容器的目标对象有实现接口"用JDK代理;如果目标对象没有实现接口"用Cglib代理
10.桥梁模式
将抽象化与实现化脱耦,使得二者可以独立地变化 将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联
<1.找出变化并封装之
<2.优先使用聚合而并不是继承
JDBC桥连