大話設計模式讀書筆記系列-4.代理模式

>>>大話設計模式讀書筆記系列目錄>>>

代理模式html

爲其餘對象提供一種代理以控制這個對象的訪問.設計模式

場景:安全

經過"屌絲男士"委託"金牌代理"給校花"楊冪"送禮物的場景來了解代理模式ide

被追求者(校花)
/**
 * 被追求者(校花)
 */
public class SchoolGirl {
    /**
     * 芳名
     */
    private String name;

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

    /**
     * 獲取 芳名
     *
     * @return name 芳名
     */
    public String getName() {
        return this.name;
    }

    /**
     * 設置 芳名
     *
     * @param name 芳名
     */
    public void setName(String name) {
        this.name = name;
    }
}

 

送禮物接口
/**
 * 送禮物接口
 */
public interface GiveGift {
    /**
     * 送洋娃娃
     */
    void giveDolls();
    /**
     * 送花
     */
    void giveFlowers();
    /**
     * 送巧克力
     */
    void giveChocolate();
}

 

追求者類
/**
 * 追求者類
 */
public class Pursuit implements GiveGift {

    /**
     * 名字
     */
    private String name;
    /**
     * 心儀的校花MM
     */
    SchoolGirl schoolGirl;

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

    /**
     * 喜歡上一個MM
     *
     * @param schoolGirl
     */
    public void like(SchoolGirl schoolGirl) {
        this.schoolGirl = schoolGirl;
    }

    @Override
    public void giveDolls() {

        if (this.schoolGirl == null) {
            return;
        }
        System.out.println(this.name + " 送洋娃娃給 " + this.schoolGirl.getName());
    }

    @Override
    public void giveFlowers() {
        if (this.schoolGirl == null) {
            return;
        }
        System.out.println(this.name + " 送鮮花給 " + this.schoolGirl.getName());
    }

    @Override
    public void giveChocolate() {
        if (this.schoolGirl == null) {
            return;
        }
        System.out.println(this.name + " 送巧克力給 " + this.schoolGirl.getName());
    }
}

 

職業代理人
/**
 * 職業代理人
 */
public class ProxyMan implements GiveGift {

    /**
     * 委託人
     */
    private Pursuit pursuit;

    /**
     * 構造代理人
     * @param pursuit
     * @param schoolGirl
     */
    public ProxyMan(Pursuit pursuit, SchoolGirl schoolGirl) {
        //委託人
        this.pursuit = pursuit;
        //心儀女神
        this.pursuit.like(schoolGirl);
    }

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

    @Override
    public void giveFlowers() {
        this.pursuit.giveFlowers();
    }

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

 

調用post

public class ProxyDemo {

    public static void main(String[] args) {
        //校花楊冪
        SchoolGirl schoolGirl=new SchoolGirl("楊冪");
        //委託人
        Pursuit pursuit=new Pursuit("屌絲男士");
        //金牌代理人,接受 屌絲男士 追求 楊冪 任務
        ProxyMan proxyMan=new ProxyMan(pursuit,schoolGirl);
        //洋娃娃腐化
        proxyMan.giveDolls();
        //鮮花腐化
        proxyMan.giveFlowers();
        //巧克力腐化
        proxyMan.giveChocolate();
    }

}

 

結果ui

屌絲男士 送洋娃娃給 楊冪
屌絲男士 送鮮花給 楊冪
屌絲男士 送巧克力給 楊冪

 

解析this

1.遠程代理,也就是爲一個對象在不一樣的地址空間提供局部表明,這樣能夠隱藏一個對象存在於不一樣地址空間的事實.url

2.虛擬代理,是根據須要建立開銷很大的對象,經過他來存放實例化須要很長時間的真實對象.spa

3.安全代理,用來控制真實對象訪問時的權限.設計

4.智能指引,是指當調用真實的對象時,代理處理另一些事.

相關文章
相關標籤/搜索