小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

大話設(shè)計模式筆記(五)の代理模式

 路人甲Java 2021-08-10

舉個栗子

故事是這樣的...

一個小伙子喜歡上了隔壁班的一個妹子,但是又不認(rèn)識,也害羞不好意思主動去說話,于是拜托了同樣在這個班的一個朋友去傳遞自己想要送的禮物。。。

代碼實現(xiàn)

該模式就不上什么簡單實現(xiàn)了,直奔完整實現(xiàn)。

被追求者

/**
 * 被追求者
 * Created by callmeDevil on 2019/6/29.
 */
public class SchoolGirl {

    private String name;

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

    public String getName() {
        return name;
    }

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

想要送的禮物

/**
 * 送禮物
 * Created by callmeDevil on 2019/6/29.
 */
public interface GiveGift {

    /**
     * 送洋娃娃
     */
    void giveDolls();

    /**
     * 送鮮花
     */
    void giveFlowers();

    /**
     * 送巧克力
     */
    void giveChocolate();

}

追求者

/**
 * 追求者
 * Created by callmeDevil on 2019/6/29.
 */
public class Pursuit implements GiveGift {

    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() + " 送你巧克力!");
    }

}

代替追求者的人

/**
 * 代替追求者的人
 * Created by callmeDevil on 2019/6/29.
 */
public class Proxy implements GiveGift {

    Pursuit gg;

    public Proxy(SchoolGirl mm) {
        // 禮物實際上是追求者買來送的,這個人只是負(fù)責(zé)傳遞禮物
        this.gg = new Pursuit(mm);
    }

    @Override
    public void giveDolls() {
        gg.giveDolls();
    }

    @Override
    public void giveFlowers() {
        gg.giveFlowers();
    }

    @Override
    public void giveChocolate() {
        gg.giveChocolate();
    }

}

測試

/**
 * 代理模式測試
 * Created by callmeDevil on 2019/6/29.
 */
public class Test {

    public static void main(String[] args) {
        SchoolGirl jiaojiao = new SchoolGirl("李嬌嬌");
        Proxy proxy = new Proxy(jiaojiao);
        proxy.giveDolls();
        proxy.giveFlowers();
        proxy.giveChocolate();
    }

}

測試結(jié)果

李嬌嬌 送你洋娃娃!
李嬌嬌 送你鮮花!
李嬌嬌 送你巧克力!

代理模式

定義

為其他對象提供一種代理以控制對這個對象的訪問。

UML圖

代碼實現(xiàn)

參見上述栗子的代碼啦,此處不再重復(fù)。

代理分類與應(yīng)用

  • 遠(yuǎn)程代理,也就是為一個對象在不同的地址空間提供局部代表。這樣可以隱藏一個對象存在于不同地址空間的事實。例如,在.NETweb項目中引用一個WebService時,會在項目中生成一個WebReference的文件夾和一些文件,其實它們就是代理,使得客戶端程序調(diào)用代理就可以解決遠(yuǎn)程訪問的問題。
  • 虛擬代理,是根據(jù)需要創(chuàng)建開銷很大的對象。通過它來存放實例化需要很長時間的真實對象。例如,打開一個很大的HTML網(wǎng)頁時,里面可能含有很多的文字和圖片,但還是可以很快的打開,此時所看到的是所有的文字,但圖片是一張張下載后才能看到的,那些未打開的圖片框,就是通過虛擬代理來替代真實的圖片,存儲了真實圖片的路徑和尺寸。
  • 安全代理,用來控制真實對象訪問時的權(quán)限。一般應(yīng)用于對象應(yīng)該有不同的訪問權(quán)限的時候。
  • 智能指引,是指當(dāng)調(diào)用真實的對象時,代理處理另外一些事。例如,計算機的引用次數(shù),這樣當(dāng)該對象沒有引用時,可以自動釋放它;或當(dāng)?shù)谝淮我靡粋€持久對象時,將它裝入內(nèi)存;或在訪問一個實際對象時,檢查是否已經(jīng)鎖定它,以確保其他對象不能改變它。

總結(jié)

  • 代理模式其實就是在訪問對象時引入一定程度間接性,因為這種間接性,可以附加多種用途。
  • 代理就是真實對象的代表。

故事結(jié)局...

是的,追求者與被追求者沒有結(jié)果,反倒是替代送禮物的人與被追求者認(rèn)識并好上了。。。誰讓追求者不主動,不是活該是啥。。。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多