静态代理模式

代理模式分为两种:静态代理和动态代理。

静态代理:代理类是由我们手动添加class类来实现,而动态代理类是由程序来生成代理类,代理无论是在生活中还是在程序中都有大量使用,如经纪人代理明星签合同,安排演出,回收尾款等操作都是通过代理完成,而具体唱歌则是有明星来完成。静态代理类和被代理类需要实现同一接口,而且由于代理类有些方法最终还是得调用被代理类来完成,所以静态代理类中还得持有被代理类的引用 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public interface Star {
    //签合同
    void signContract();
    //唱歌
    void sing();
    //收尾款
    void collectMoney();
}
//======================================
public class ProxyStar implements Star {
    private Star star;
     
    public ProxyStar(Star star) {//通过注入持有被代理对象的引用
        super();
        this.star = star;
    }
 
    @Override
    public void signContract() {
        System.out.println("ProxyStar 签合同"); //这些方法都可以由代理对象,经纪人来完成
    }
 
    @Override
    public void sing() {
        star.sing();//调用被代理对象 唱歌 方法 ,因为唱歌这个方法必须由明星本人完成 代理对象无法代劳
    }
 
    @Override
    public void collectMoney() {
        System.out.println("ProxyStar 收尾款");
    }
 
}
//=============================================
public class RealStar implements Star {
 
    @Override
    public void signContract() {
        System.out.println("RealStar 签合同");
    }
 
    @Override
    public void sing() {
        System.out.println("RealStar 唱歌");
    }
 
    @Override
    public void collectMoney() {
        System.out.println("RealStar 收尾款");
    }
}
//=========================================
    @Test
    public void func()
    {
        Star realStar=new RealStar();
        Star proxyStar=new ProxyStar(realStar); //注入被代理对象
        proxyStar.signContract();//这些事情由经纪人完成
        proxyStar.sing();//这些事情由明星本人完成
        proxyStar.collectMoney();//这些事情由经纪人完成
    }

  

posted @   关键步就几步  阅读(348)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示