代理模式

代理模式: 爲其它對象提供一種代理以控制對這個對象的訪問。

這句話已經將代理模式講清楚了,就是將對象和對象的一些操作封裝在代理類裏,讓代理類來代替對象來進行操作。

代理模式結構:
代理模式結構

封裝對象的一些方法到代理類中,那就得用接口,抽象出這些方法,然後在代理類中調用對象的方法。

比如說我們有一個追求者想要追求學生妹:

public class SchoolGirl {
    private String name;
    public void setName(String girlName) {
        name = girlName;
    }
    public String getName() {
        return name;
    }
}
public class Pursuit {

    private SchoolGirl mm;

    public Pursuit(SchoolGirl mm) {
        this.mm = mm;
    }

    public void GiveDolls() {
        System.out.println(mm.getName() + "送你洋娃娃");
    }

    public void GiveFlowers() {
        System.out.println(mm.getName() + "送你鮮花");
    }

    public void GiveChocolate() {
        System.out.println(mm.getName() + "送你巧克力");
    }
}

這是我們之前的需求,現在我們要添加一箇中間人,讓他來轉送禮物。
這個中間人就是代理,他只需要能送禮就行了,即只要將追求者的送禮方法封裝起來。自然而然我們就會用到接口。

public interface IGiveGift {
    void GiveDolls();
    void GiveFlowers();
    void GiveChocolate();
}

原追求者類只需要implements這個接口,代碼都不需要動,符合開閉原則,完美!

public class Pursuit implements IGiveGift {

    private SchoolGirl mm;

    public Pursuit(SchoolGirl mm) {
        this.mm = mm;
    }

    @Override
    public void GiveDolls() {
        System.out.println(mm.getName() + "送你洋娃娃");
    }

    @Override
    public void GiveFlowers() {
        System.out.println(mm.getName() + "送你鮮花");
    }

    @Override
    public void GiveChocolate() {
        System.out.println(mm.getName() + "送你巧克力");
    }
}

接口定義的方法,爲代理人送禮方法提供了接口來調用追求者的送禮方法。

public class Proxy implements IGiveGift {
    Pursuit ps;

    public Proxy(SchoolGirl mm) {
        this.ps = new Pursuit(mm);
    }

    @Override
    public void GiveDolls() {
        ps.GiveDolls();
    }

    @Override
    public void GiveFlowers() {
        ps.GiveFlowers();
    }

    @Override
    public void GiveChocolate() {
        ps.GiveChocolate();
    }
}

在這裏,追求者不需要具體知道哪個學生妹,讓代理去送禮就好了,代理想送誰就送誰。

例子不太貼切,如果代理送禮給了醜八怪,這個追求者不是慘了。。。。。。

代理模式應該用在功能或者內容很大的類,就是一種分割的方法,這是我的理解。

不管是:

用在一個對象在不同的地址空間的局部代理,用來隱藏一個對象存在於不同地址空間的實現

還是:

用在創建很大的對象,示例化很長的對象,比如說html圖片的加載

或者是:

控制對象的訪問權限

我的理解是:代理模式利用接口對原有對象功能的進行分割,並用代理來控制原有對象的這些分割出來的功能。

發佈了27 篇原創文章 · 獲贊 2 · 訪問量 9673
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章