代理模式

来源:互联网 发布:vmware mac os 联网 编辑:程序博客网 时间:2024/05/29 10:59

用一个成语来解释代理模式很恰当---------------越俎代庖
定义:给一个对象提供一个代理对象,由这个代理对象控制对原对象的引用,使得代理类在客户端和原对象之间起到一个中介作用
关于定义的几点说明:
                          1,代理类需要保存原来对象的引用,从而可以操作原对象
                          2,实际上的处理逻辑仍然在具体的原类里,而代理只负责调用
                          3,代理类除了代理原类之外,还可以有自己的功能
例子:小说《知北游》里面,里面的人妖如果想要获得灵宝天或者色*欲天的宝物,必须得进化飞升才能进入,但是主人公林飞却可以不用进化飞升之间从盗贼“空空玄”手里直接拿到宝物,在这里空空玄就可以看做是色*欲天或者是灵宝天的代理
例子程序:
    /**
 *宝物接口,里面是宝物的信息
 * @author Arthur
 */
public interface Treasure {
    void treasureInfo();
}
/**********************************************************
/**
 *原类
 * @author Arthur
 */
public class LingBaoTian implements Treasure{
    private String info = null;
    @Override
    public void treasureInfo() {
        info = "这是灵宝天的宝贝";
       System.out.println(info);
    }
    
}
*********************************************************************
/**
 *空空玄代理类,持有原类灵宝天的引用
 * @author Arthur
 */
public class KongKongXuan implements Treasure{




    
    private Treasure lbt = new LingBaoTian();//
    @Override
    public void treasureInfo() {
        System.out.println("给你");
        lbt.treasureInfo();
    }




    public KongKongXuan() {
    }
    
}
**************************************************************************
/**
 *主人公林飞
 * @author Arthur
 */
public class LinFei {




    KongKongXuan kkx;//林飞的空空玄




    public LinFei() {
        kkx = new KongKongXuan();
    }




    public LinFei(KongKongXuan kkx) {
        this.kkx = kkx;
    }
    
    /**
     * 命令空空玄拿来宝物
     */
    public void commondKkx(){
        System.out.println("我要想要灵宝天的宝物");
        kkx.treasureInfo();
    }
    
}
******************************************************************************
/**
 *主人公林飞
 * @author Arthur
 */
public class LinFei {




    KongKongXuan kkx;//林飞的空空玄




    public LinFei() {
        kkx = new KongKongXuan();
    }




    public LinFei(KongKongXuan kkx) {
        this.kkx = kkx;
    }
    
    /**
     * 命令空空玄拿来宝物
     */
    public void commondKkx(){
        System.out.println("我要想要灵宝天的宝物");
        kkx.treasureInfo();
    }
    
}
*********************************************************


/**
 *主人公林飞
 * @author Arthur
 */
public class LinFei {




    KongKongXuan kkx;//林飞的空空玄




    public LinFei() {
        kkx = new KongKongXuan();
    }




    public LinFei(KongKongXuan kkx) {
        this.kkx = kkx;
    }
    
    /**
     * 命令空空玄拿来宝物
     */
    public void commondKkx(){
        System.out.println("我要想要灵宝天的宝物");
        kkx.treasureInfo();
    }
    
}
********************************
结果“
我要想要灵宝天的宝物
给你
这是灵宝天的宝贝

原创粉丝点击