爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          代理模式

          Posted on 2009-01-20 17:26 非洲小白臉 閱讀(1177) 評論(0)  編輯  收藏 所屬分類: 模式
          代理模式應用場景舉例
          比如在玩“極品飛車”這款游戲,如果游戲者手中的金錢達到了一定的數量就可以到車店買一部性能更高的賽車,那么這個賣車的“車店”就是一個典型的“汽 車廠家”的“代理”,他為汽車廠家“提供賣車的服務”給有需求的人士。從面向對象的方面考慮,“銷售汽車的代理”也是一個對象,那么這個對象也具有一定的 狀態,在軟件項目中這個對象也具有管理財務進銷存的基本功能,那么在設計時就要以面向OOP編程的思想來考慮軟件的類結構,這個銷售汽車的代理也是一個類 了。

          代理模式解釋
          類型:結構模式
            對一些對象提供代理,以限制那些對象去訪問其它對象。

          代理模式UML圖


          代理模式-JAVA代碼實現
          新建一個買車的接口:
          package buy_car_package;

          public interface buy_car_package {

              
          public void buy_car();
          }


          新建一個people人類,具有買車的行為,所以實現接口buy_car_package:

          package buy_car_imple;

          import buy_car_package.buy_car_package;

          public class people implements buy_car_package {

              
          private int cash;
              
          private String username;

              
          public int getCash() {
                  
          return cash;
              }

              
          public void setCash(int cash) {
                  
          this.cash = cash;
              }

              
          public String getUsername() {
                  
          return username;
              }

              
          public void setUsername(String username) {
                  
          this.username = username;
              }

              
          public void buy_car() {
                  System.out.println(username 
          + "買了一臺新車");
              }

          }


          people類不能擁有車,必須經過proxy代理類的認證,符合條件之后才可以擁有車輛,新建一個代理,這個代理類來考察當前的people是否有資格進行買車:

          package buy_car_imple;

          import buy_car_package.buy_car_package;

          public class proxy_buy_car_imple implements buy_car_package {

              
          private people people;

              
          public people getPeople() {
                  
          return people;
              }

              
          public void setPeople(people people) {
                  
          this.people = people;
              }

              
          public void buy_car() {
                  
          if (people.getCash() > 3000) {
                      System.out.print(
          "汽車商店幫:");
                      people.buy_car();
                  } 
          else {
                      System.out.println(people.getUsername() 
          + "金錢不夠,請繼續比賽!");
                  }
              }

          }


          最后創建一個客戶端,用來模擬買車的行為:

          package run_main;

          import buy_car_imple.people;
          import buy_car_imple.proxy_buy_car_imple;

          public class run_main {
              
          public static void main(String[] args) {
                  people people_ref1 
          = new people();
                  people_ref1.setCash(
          4000);
                  people_ref1.setUsername(
          "高洪巖");

                  people people_ref2 
          = new people();
                  people_ref2.setCash(
          2000);
                  people_ref2.setUsername(
          "巖洪高");

                  proxy_buy_car_imple proxy_buy_car_imple 
          = new proxy_buy_car_imple();
                  proxy_buy_car_imple.setPeople(people_ref1);
                  proxy_buy_car_imple.buy_car();

                  proxy_buy_car_imple.setPeople(people_ref2);
                  proxy_buy_car_imple.buy_car();

              }
          }


          程序運行結果如下:

          高洪巖花4000塊 買了新車 交易結束
          巖洪高金錢不夠,請繼續比賽
          !

          這樣people就不可能自由的擁有車輛,必須經過proxy的認證之后才可以。
          而代理模式在GOF四人幫的介紹中大體有4種使用情景:
          (1)遠程代理。典型的就是客戶端與webservice使用的情況,客戶端由于是針對OOP編程,而不是針對webservice中的方法進行編 程,所以得在客戶端模擬一下webservice的環境,用proxy來對webservice進行包裝,這樣就可以使用proxy代理類來遠程操作 webservice了。
          (2)虛擬代理。比如你要開發一個大文檔查看軟件,大文檔中有大的圖片,有可能一個圖片有100MB,在打開文件時不可能將所有的圖片都顯示出來,這樣就可以使用代理模式,當需要查看圖片時,用proxy來進行大圖片的打開。
          (3)安全代理。其實也就是本例中所舉的買車的例子,金錢不夠不可以買車!
          (4)智能指引。比如在訪問一個對象時檢測其是否被鎖定等情況。
          主站蜘蛛池模板: 锡林浩特市| 乌拉特后旗| 南平市| 车致| 阜新| 化德县| 灵寿县| 新乡县| 泽库县| 承德市| 余干县| 安仁县| 中卫市| 云龙县| 滁州市| 杨浦区| 贵港市| 石楼县| 深州市| 和政县| 邢台市| 古浪县| 昌乐县| 淄博市| 宝清县| 博乐市| 北碚区| 宣城市| 双牌县| 静宁县| 商都县| 万山特区| 邹平县| 泽州县| 工布江达县| 大姚县| 横山县| 精河县| 麟游县| 安多县| 封开县|