<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帛羅閣 閱讀(4205) 評論(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)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久亚洲裙底偷窥综合| 亚洲国产日韩a在线播放| 成年人网站免费视频| 亚洲老熟女五十路老熟女bbw| 国产成人无码a区在线观看视频免费| 免费观看四虎精品成人| 亚洲AV无码一区二区三区系列| AA免费观看的1000部电影| 黄页网站在线视频免费| 国产亚洲AV无码AV男人的天堂| 精品久久久久成人码免费动漫| 免费大片黄在线观看| 久久久久亚洲AV无码观看| 国产精品jizz在线观看免费| 最近2019中文免费字幕在线观看 | 噜噜嘿在线视频免费观看| 一级免费黄色大片| 亚洲国产日韩女人aaaaaa毛片在线| 免费人成年轻人电影| h片在线免费观看| 一级人做人爰a全过程免费视频| 日韩亚洲Av人人夜夜澡人人爽| 国产成人综合久久精品免费| 免费国产黄网站在线观看可以下载| 亚洲aⅴ无码专区在线观看 | 免费国产小视频在线观看| 95免费观看体验区视频| 无人视频在线观看免费播放影院| 亚洲女人18毛片水真多| 久久精品亚洲乱码伦伦中文| 成人黄18免费视频| 99精品视频在线观看免费播放| 美女视频黄视大全视频免费的| 亚洲伊人久久大香线蕉结合| 亚洲阿v天堂在线| 亚洲AⅤ永久无码精品AA| 成年人网站在线免费观看| 69视频在线观看高清免费| 91在线视频免费观看| 男女猛烈无遮掩视频免费软件| 亚洲综合精品成人|