学习是件开心事

代理模式

通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的功能上,增加额外的功能补充,即扩展目标对象的功能。

代理模式和适配器模式的区别: 如果目标接口内需要添加新功能则用适配器模式,如果目标接口前后需要添加新功能则使用代理模式。

静态代理

每个目标对象都有一个对应的代理对象,在代理对象注入原有接口对象,再调用原有接口实现的前后,可以在代理对象里添加新功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public interface IStar {
void sing();
}
public class LDHStar implements IStar {
// 原有对象的原有功能很简单
@Override
public void sing() {
System.out.println("刘德华唱歌吧");
}
}
public class LDHStarProxy implements IStar {
private LDHStar ldhStar;
public LDHStarProxy(LDHStar ldhStar) {
this.ldhStar = ldhStar;
}
//代理对象拥有目标对象 再调用原实现之前后 可以添加新功能
@Override
public void sing() {
System.out.println("唱歌前有准备");
ldhStar.sing();
System.out.println("唱歌后还要善后");
}
}

测试用例及运行结果为:

1
2
3
4
5
6
7
8
public static void main(String[] args) {
LDHStarProxy ldhStarProxy = new LDHStarProxy(new LDHStar());
ldhStarProxy.sing();
}
唱歌前有准备
刘德华唱歌吧
唱歌后还要善后

动态代理