設計模式之Proxy模式(筆記)

代理模式:爲其他對象提供一種代理以控制對這個對象的訪問
代理模式適用場合:第一,遠程代理,也就是爲一個對象在不同的地址空間提供局部代理,例如webservice應用;第二、虛擬代理,根據需要創建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象;第三、安全代理,用來控制真實對象訪問時的權限;第四、智能指引,是指當調用真實的對象時,代理處理另外一些事。

舉個實例:大鵬出差在外,柳巖今天過生日,爲了不讓自己的女友掃興,大鵬拖快遞員幫忙送花,送娃娃,送巧克力,爲柳巖慶生。

定義一個公共接口 IGiveGift

public interface IGiveGift {

    public void giveFlower();

    public void giveDolls();

    public void giveChocolate();
}

接着定義一個 Girl 類

public class Girl {

    private String name;

    public Girl(){  
    }

    public Girl(String name){
        this.name=name;
    }

    public void setName(String name){
        this.name=name;
    }
    public String getName(){
        return name;
    }
}

接着定義一個實體類 Pursuit 繼承 IGiveGift

public class Pursuit implements IGiveGift {

    protected Girl girl;

    public Pursuit(Girl girl){
        this.girl=girl;
    }

    @Override
    public void giveFlower() {
        System.out.println(girl.getName()+",送你玫瑰花");    
    }
    @Override
    public void giveDolls() {
        System.out.println(girl.getName()+",送你芭比娃娃");   
    }
    @Override
    public void giveChocolate() {
        System.out.println(girl.getName()+",送你德芙"); 
    }

}

接着定義一個代理類 Proxy 繼承 IGiveGift

public class Proxy implements IGiveGift{

    protected Pursuit pursuit;

    //代理
    public Proxy(Girl girl){
        pursuit=new Pursuit(girl);
    }
    @Override
    public void giveFlower() {
        pursuit.giveFlower();

    }
    @Override
    public void giveDolls() {
        pursuit.giveDolls();    
    }
    @Override
    public void giveChocolate() {
        pursuit.giveChocolate();    
    }
}

客戶端代碼

public static void main(String[] args) {

        //代理模式
       Girl girl=new Girl("柳巖"); 
       Proxy dapeng=new Proxy(girl);

       dapeng.giveChocolate();
       dapeng.giveDolls();
       dapeng.giveFlower();
 }

這樣通過快遞代理,大鵬就可以將禮物送個自己的女朋友柳巖了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章