Mybatis-代理模式
代理模式
需要注意的有下面几点:
- 用户只关心接口功能,而不在乎谁提供了功能。上图中接口是 Subject。
- 接口真正实现者是上图的 RealSubject,但是它不与用户直接接触,而是通过代理。
- 代理就是上图中的 Proxy,由于它实现了 Subject 接口,所以它能够直接与用户接触。
- 用户调用 Proxy 的时候,Proxy 内部调用了 RealSubject。所以,Proxy 是中介者,它可以增强 RealSubject 操作。
静态代理
代码简单,好理解不通用
编写一个接口里有对应方法
package test;
public interface fun {
void add();
}
package test;
public class lookMovie implements fun {
@Override
public void add() {
System.out.println("您正在观看电影 《...》");
}
}
package test;
public class see implements fun{
lookMovie movie;
public see(lookMovie movie) {
super();
this.movie = movie;
}
@Override
public void add() {
movie.add();
}
package test;
public class ProxyTest {
public static void main(String[] args) {
lookMovie lookMovie = new lookMovie ();
movie.play();
}
}
动态代理-必须有接口
代码复杂,有固定流程 可以使用一系列代码
- 动态代理它可以直接给某一个目标(被代理 对象)对象(实现了某个或者某些接口)生成一个代理对象,而不需要代理类存在,如上图中经理人需要存在。
- 动态代理与代理模式原理是一样的,只是它没有具体的代理类,直接通过反射生成了一个代理对象
这里是在mybatis中测试类里
通过重写接口中的方法,对方法进行增强而不需要修改接口代码,这样既增强了代码的可维护性,又可以减少工作量。