<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)

    隨筆分類

    隨筆檔案

    相冊

    收藏夾

    博客

    文檔

    站點

    論壇

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产无限免费观看黄网站| 亚洲五月午夜免费在线视频| 亚洲一卡二卡三卡| 国产成人精品久久亚洲高清不卡| 你是我的城池营垒免费看| 毛片a级毛片免费观看品善网| 亚洲一区日韩高清中文字幕亚洲| 亚洲国产成人精品无码一区二区 | 亚洲成a人片在线观看老师| 蜜芽亚洲av无码精品色午夜| 亚洲精华国产精华精华液| 一级毛片免费观看不卡视频| 全亚洲最新黄色特级网站| 亚洲AV色吊丝无码| 毛片a级毛片免费播放100| 亚洲成a∧人片在线观看无码 | 中文字幕无线码免费人妻| 免费羞羞视频网站| 亚洲精品视频免费看| 最近2019中文免费字幕在线观看| 四虎永久在线精品免费观看地址| 亚洲国产成人va在线观看网址| 999久久久免费精品国产| 亚洲久本草在线中文字幕| 久久最新免费视频| 亚洲激情视频在线观看| 最近中文字幕mv免费高清电影| 色欲色欲天天天www亚洲伊| 中文字幕无码不卡免费视频| 在线观看亚洲一区二区| 人妻丰满熟妇无码区免费| 久久综合九九亚洲一区| 91国内免费在线视频| 亚洲成人黄色在线观看| 国产妇乱子伦视频免费| 亚洲国产精华液2020| 伊人久久大香线蕉亚洲| 91在线免费观看| 亚洲午夜无码久久久久小说| 午夜成年女人毛片免费观看| 亚洲天堂电影在线观看|