代理设计模式

时间:2022-03-08 20:02:33

一.什么是代理设计模式

为其他对象提供一种代理以控制对这个对象的访问。

二.代理设计模式的作用

在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

三、代理模式的应用

1、远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2、虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3、安全代理:用来控制真实对象访问时的权限。
4、智能指引:是指当调用真实的对象时,代理处理另外一些事

三.如何实现代理设计模式

     首先设计一下应用场景:有一个美女想找一个男盆友,但又不好意思直接去找,于是就把自己的个人信息委托给一家相亲平台,让相亲平台去帮助自己找。正好又有一个帅气的男生通过相亲平台发现这个美女很符合自己要求,于是就通过这个平台去了解这个美女的个人信息。

1.静态代理模式
//先定义一个美女接口
public interface WoMan {       
    //这个美女有哪些个人信息?  
    public void xiongda();//胸大       
    public void tuichang();//腿长 
  


//定义一个真实的美女
public class MeiMei implements WoMan{   
    @Override  
    public void xiongda() {  
        System.out.println("我的胸很大");            
    }   
    @Override  
    public void tuichang() {  
        System.out.println("我的腿很长");            
    }    


//定义一个相亲平台代理
public class DaiLi implements WoMan {      
    private WoMan woman;        
    public DaiLi(){  
        //默认的话是美女的代理  
        this.woman = new MeiMei();  
    }  
    //她可以是WoMan的任何一个女人的代理,只要你是这一类型  
    public DaiLi(WoMan woman){  
        this.woman = woman;  
    }  
  
    @Override  
    public void xiongda() {  
        //美女的胸部信息。  
        this.woman.xiongda();           
    }  
  
    @Override  
    public void tuichang() {  
        //美女的腿长信息  
        this.woman.tuichang();            
    }  
}   

//定义一个男生通过相亲平台去了解一个美女
public class man {  
    public static void main(String[] args) {
//第一种用定义好的一个美女对象  
        DaiLi daili = new DaiLi();            
        daili.xiongda();  
        daili.tuichang();  
        //第二种跟具符合要求的去找很多美女个体
//WoMan woman = new 另外的美女();
        //把另外符合要求的美女也给平台代理 
        //DaiLi daili = new DaiLi(woman);  
        //daili.xiongda();  
        //daili.tuichang();
    }  
}

2.动态代理模式 
何为动态代理:就是通过反射机制获得对象,代理对象。