java 静态代理模式

时间:2022-06-20 19:29:40
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 }