1 package proxy.staticproxy;
2
3 public interface IStar {
4
5 public void sing();
6 }
1 package proxy.staticproxy;
2
3 public class RealStar implements IStar{
4 @Override
5 public void sing() {
6 System.out.println("我是大明星:我要大声唱:巴拉巴拉。。。");
7 }
8 }
1 package proxy.staticproxy;
2
3 public class ProxyStar implements IStar {
4
5 private IStar realStar;
6
7 public IStar proxy(IStar realStar){
8 this.realStar = realStar;
9 return this;
10 }
11
12
13 @Override
14 public void sing() {
15
16 System.out.println("我是代理人:大明星唱歌开始前,我先宣传一下:巴拉巴拉。。。");
17
18 this.realStar.sing();
19
20 System.out.println("我是代理人:大明星唱歌完毕了,我来总结一下:巴拉巴拉。。。");
21 }
22 }
1 package proxy.staticproxy;
2
3 public class Test {
4
5 /**
6 *
7 * 静态代理可以分为两类,以“代理人”和“大明星”为例。
8 * 下面测试的为基于相同接口的代理,代理人和大明星都是实现的相同接口
9 * 代理人实例内部维护(组合)大明星实例
10 * 对外暴露代理人的行为
11 * 另一类是基于继承的代理,假如大明星本身就没有实现任何接口
12 * 那么,代理人可以通过继承大明星,覆写大明星的方法(除final修饰的方法,wait方法,notify方法)、
13 * 达到代理大明星的逻辑
14 * @param args
15 */
16 public static void main(String[] args) {
17 IStar star = new ProxyStar().proxy(new RealStar());
18 star.sing();
19 }
20 }