Dev@Free

          zJun's Tech Weblog

          [GoF23] java中的Proxy模式

          代理(Proxy)模式,顧名思義就是對(duì)象之間不直接發(fā)生聯(lián)系,而是通過(guò)中間的代理人進(jìn)行溝通。這種關(guān)系在現(xiàn)在的娛樂(lè)圈中普遍存在:明星通常都有經(jīng)紀(jì)人來(lái)代理自己的演出事宜,而不是直接去聯(lián)系演出商。下面就通過(guò)這個(gè)實(shí)際中的例子來(lái)說(shuō)明代理模式。
          首先畫(huà)出關(guān)系類(lèi)圖


          演藝人士:包括經(jīng)紀(jì)人和明星,都屬于娛樂(lè)圈中人。
          /**
          ?*?演藝人士
          ?*?
          ?*?
          @author ?zJun
          ?
          */

          public ? interface ?Artist? {
          ????
          /**
          ?????*?演出活動(dòng)
          ?????
          */

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

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

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

          ????
          private ?String?SIGN? = ? " [經(jīng)紀(jì)人] "
          ;

          ????
          // ?旗下明星

          ???? private ?Star?star;

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

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


          ????
          /**
          ?????*?經(jīng)紀(jì)人代明星打理一切演出事宜
          ?????
          */

          ????
          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);
          ????}


          }

          贊助商:通過(guò)聯(lián)系經(jīng)紀(jì)人安排明星演出
          /**
          ?*?贊助商:?與經(jīng)紀(jì)人聯(lián)系安排演出事宜
          ?*?
          ?*?
          @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(
          " 演唱會(huì) "
          );
          ????}


          }

          [運(yùn)行結(jié)果]
          [ 經(jīng)紀(jì)人 ] 簽訂和約
          [ 明星 ]
          演電影
          [ 經(jīng)紀(jì)人 ]
          演出后交稅
          [ 經(jīng)紀(jì)人 ]
          簽訂和約
          [ 明星 ]
          拍電視
          [ 經(jīng)紀(jì)人 ]
          演出后交稅
          [ 經(jīng)紀(jì)人 ]
          簽訂和約
          [ 明星 ]
          出唱片
          [ 經(jīng)紀(jì)人 ]
          演出后交稅
          [ 經(jīng)紀(jì)人 ]
          簽訂和約
          [ 明星 ]
          演唱會(huì)
          [ 經(jīng)紀(jì)人 ] 演出后交稅

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

          posted on 2006-03-21 23:34 zJun's帛羅閣 閱讀(4215) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): 設(shè)計(jì)模式

          評(píng)論

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

          有趣,通俗易懂,符合面向?qū)ο蟮母拍畎。?nbsp; 回復(fù)  更多評(píng)論   

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

          不過(guò)你并沒(méi)有真正的把Java的Proxy的概念用出來(lái)。
          首先Broker不應(yīng)該是Artist。
          Broker只應(yīng)該是InvocationHandler,Artist代理是Proxy的newProxyInstance方法自動(dòng)構(gòu)造出來(lái)的,Broker自己去找Artist(當(dāng)然也可以采用IOC讓Artist自己去找Broker),通過(guò)InvocationHandler的invoke方法截獲Show方法,找適應(yīng)的Artist去處理。
          這個(gè)例子需要改進(jìn)一下。  回復(fù)  更多評(píng)論   

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

          @guitarpoet
          是的。原本是要接著寫(xiě)Java API提供的實(shí)現(xiàn)Proxy模式的(就像你說(shuō)的那樣通過(guò)InvocationHandler和Proxy來(lái)實(shí)現(xiàn)),只是昨晚時(shí)間太晚了,只好先寫(xiě)到這里,先介紹Proxy的概念,留到今天再寫(xiě)了。  回復(fù)  更多評(píng)論   

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

          Broker類(lèi)實(shí)現(xiàn)InvocationHandler接口為什么不見(jiàn)invoke()方法?  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

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

          統(tǒng)計(jì)

          常用鏈接

          留言簿(15)

          隨筆分類(lèi)

          隨筆檔案

          相冊(cè)

          收藏夾

          博客

          文檔

          站點(diǎn)

          論壇

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 无棣县| 雅江县| 刚察县| 海淀区| 定州市| 南江县| 鄂尔多斯市| 苍南县| 新兴县| 合水县| 化德县| 涞源县| 襄汾县| 泗阳县| 宿迁市| 介休市| 福建省| 图们市| 镇平县| 舒城县| 鸡东县| 大厂| 大石桥市| 五峰| 蕲春县| 当雄县| 义乌市| 岑溪市| 阳泉市| 奉节县| 兴城市| 武胜县| 西藏| 湖州市| 正安县| 黔西县| 德钦县| 富锦市| 永吉县| 林口县| 正蓝旗|