<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dev@Free

    zJun's Tech Weblog

    [GoF23] java中的Proxy模式

    代理(Proxy)模式,顧名思義就是對象之間不直接發生聯系,而是通過中間的代理人進行溝通。這種關系在現在的娛樂圈中普遍存在:明星通常都有經紀人來代理自己的演出事宜,而不是直接去聯系演出商。下面就通過這個實際中的例子來說明代理模式。
    首先畫出關系類圖


    演藝人士:包括經紀人和明星,都屬于娛樂圈中人。
    /**
    ?*?演藝人士
    ?*?
    ?*?
    @author ?zJun
    ?
    */

    public ? interface ?Artist? {
    ????
    /**
    ?????*?演出活動
    ?????
    */

    ????
    public ? void ?show(String?showType);
    }

    經紀人
    /**
    ?*?經紀人(參考《Java與模式》-?"代理(Proxy)模式"一章部分代碼)
    ?*?
    ?*?
    @author ?zJun
    ?*?
    ?
    */

    public ? class ?Broker? implements ?Artist,?InvocationHandler? {

    ????
    private ?String?SIGN? = ? " [經紀人] "
    ;

    ????
    // ?旗下明星

    ???? private ?Star?star;

    ????
    /**
    ?????*?簽訂和約
    ?????
    */

    ????
    public ? void ?subcontract()? {
    ????????System.out.println(SIGN?
    + ? " 簽訂和約 "
    );
    ????}


    ????
    /**
    ?????*?經紀人代明星打理一切演出事宜
    ?????
    */

    ????
    public ? void ?show(String?showType)? {
    ????????
    // ?簽約

    ????????subcontract();

    ????????
    // ?通知明星演出

    ???????? if ?(star? == ? null )? {
    ????????????star?
    = ? new
    ?Star();
    ????????}

    ????????star.show(showType);

    ????????
    // ?交稅
    ????????payTax();
    ????}


    ????
    /**
    ?????*?演出后交稅
    ?????
    */

    ????
    public ? void ?payTax()? {
    ????????System.out.println(SIGN?
    + ? " 演出后交稅 "
    );
    ????}

    }


    明星
    /**
    ?*?明星
    ?*?
    ?*?
    @author ?zJun
    ?*?
    ?
    */

    public ? class ?Star? implements ?Artist? {

    ????
    private ?String?SIGN? = ? " [明星] "
    ;

    ????
    public ? void ?show(String?showType)?
    {
    ????????System.out.println(SIGN?
    +
    ?showType);
    ????}


    }

    贊助商:通過聯系經紀人安排明星演出
    /**
    ?*?贊助商:?與經紀人聯系安排演出事宜
    ?*?
    ?*?
    @author ?zJun
    ?
    */

    public ? class ?Patron? {

    ????
    /**
    ?????*?
    @param ?args
    ?????
    */

    ????
    public ? static ? void ?main(String[]?args)? {
    ????????Broker?broker?
    = ? new
    ?Broker();
    ????????broker.show(
    " 演電影 "
    );
    ????????broker.show(
    " 拍電視 "
    );
    ????????broker.show(
    " 出唱片 "
    );
    ????????broker.show(
    " 演唱會 "
    );
    ????}


    }

    [運行結果]
    [ 經紀人 ] 簽訂和約
    [ 明星 ]
    演電影
    [ 經紀人 ]
    演出后交稅
    [ 經紀人 ]
    簽訂和約
    [ 明星 ]
    拍電視
    [ 經紀人 ]
    演出后交稅
    [ 經紀人 ]
    簽訂和約
    [ 明星 ]
    出唱片
    [ 經紀人 ]
    演出后交稅
    [ 經紀人 ]
    簽訂和約
    [ 明星 ]
    演唱會
    [ 經紀人 ] 演出后交稅

    參考資料
    《Java與模式》 閻宏 電子工業出版社

    posted on 2006-03-21 23:34 zJun's帛羅閣 閱讀(4218) 評論(4)  編輯  收藏 所屬分類: 設計模式

    評論

    # re: [GoF23] java中的Proxy模式 2006-03-22 13:59 guitarpoet

    有趣,通俗易懂,符合面向對象的概念啊,哈哈哈  回復  更多評論   

    # re: [GoF23] java中的Proxy模式 2006-03-22 14:08 guitarpoet

    不過你并沒有真正的把Java的Proxy的概念用出來。
    首先Broker不應該是Artist。
    Broker只應該是InvocationHandler,Artist代理是Proxy的newProxyInstance方法自動構造出來的,Broker自己去找Artist(當然也可以采用IOC讓Artist自己去找Broker),通過InvocationHandler的invoke方法截獲Show方法,找適應的Artist去處理。
    這個例子需要改進一下。  回復  更多評論   

    # re: [GoF23] java中的Proxy模式 2006-03-22 16:56 zJun

    @guitarpoet
    是的。原本是要接著寫Java API提供的實現Proxy模式的(就像你說的那樣通過InvocationHandler和Proxy來實現),只是昨晚時間太晚了,只好先寫到這里,先介紹Proxy的概念,留到今天再寫了。  回復  更多評論   

    # re: [GoF23] java中的Proxy模式 2008-01-23 15:22 Star

    Broker類實現InvocationHandler接口為什么不見invoke()方法?  回復  更多評論   

    導航

    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統計

    常用鏈接

    留言簿(15)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产精品日韩在线观看| 亚洲国产成人va在线观看网址| 亚洲?V无码成人精品区日韩| 久久久久国产亚洲AV麻豆| 久久久久亚洲AV成人无码| 亚洲熟妇av午夜无码不卡| 有色视频在线观看免费高清在线直播| 成全视频免费观看在线看| 午夜神器成在线人成在线人免费 | 国产亚洲一区区二区在线| 老司机午夜在线视频免费| 57pao国产成视频免费播放| 四虎亚洲国产成人久久精品| 美女被羞羞网站免费下载| 亚洲国产成人久久一区WWW| 亚洲成_人网站图片| 免费看搞黄视频网站| 国产青草视频在线观看免费影院| 亚洲妇熟XXXX妇色黄| 免费人成再在线观看网站| 999久久久免费精品国产 | 又色又污又黄无遮挡的免费视| 久久精品a亚洲国产v高清不卡| 看全免费的一级毛片| 毛片免费在线观看网址| 亚洲精品韩国美女在线| 国内精品免费视频精选在线观看| 亚洲国产精品久久久久婷婷软件 | 免费观看亚洲人成网站| 亚洲色大成网站www尤物| 又粗又硬又大又爽免费视频播放| 老司机精品免费视频| 亚洲成av人在片观看| 你懂的免费在线观看| 亚洲综合精品网站| 成人免费网站视频www| 亚洲va久久久噜噜噜久久狠狠| 一区二区在线视频免费观看| 亚洲男人的天堂一区二区| 国产亚洲人成在线播放| 国产免费人视频在线观看免费|