隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156378
          • 排名 - 390

          最新評論

          [關鍵字]:java,design pattern,設計模式,《Java與模式》學習,Proxy Pattern,代理模式
          [環境]:StarUML5.0 + JDK6
          [作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
          [正文]:

          智能引用代理:

          SmartProxyTest.java(并不屬于pattern.proxy.smart包):
          import pattern.proxy.smart.*;
          /**
           * 智能引用代理:Smart Proxy
           *
           * 在搜索的時需要進行進行權限認證和使用計數
           *
           * @version 2009-6-29
           * @author Winty(wintys@gmail.com)
           */
          public class SmartProxyTest{
              public static void main(String[] args){
                  String result;
                  Searcher searcher;

                  //未授權訪問
                  searcher = new ProxySearcher("anonymous");
                  result = searcher.search("abc");
                  System.out.println("result:" + result);

                  //授權訪問
                  searcher = new ProxySearcher("admin");
                  result = searcher.search("xyz");
                  System.out.println("result:" + result);
              }
          }


          Searcher.java:
          package pattern.proxy.smart;
          /**
           * 搜索
           * @version 2009-6-29
           * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
           */
          public interface Searcher{
              /**
               * @param value 要搜索的內容
               */
              public String search(String value);
          }

          RealSearcher.java:
          package pattern.proxy.smart;
          /**
           * 實際執行搜索的類。
           * 為了避免客戶端直接使用,本類沒有設置為public
           * @version 2009-6-29
           * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
           */
          class RealSearcher implements Searcher{
              @Override
              public String search(String value){
                  //在這里可以根據value到數據庫中執行實際搜索,
                  //此只是示例代碼。
                  String result = "sample result";

                  return result;
              }
          }

          ProxySearcher.java:
          package pattern.proxy.smart;
          /**
           * 代理搜索
           * 將搜索傳遞給RealSearcher并對調用進行驗證和計數
           *
           * @version 2009-6-29
           * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
           */
          public class ProxySearcher implements Searcher{
              private Searcher searcher;
              private String user;

              public ProxySearcher(String user){
                  searcher = new RealSearcher();
                  this.user = user;
              }

              @Override
              public String search(String value){

                  if(AccessValidator.validate(user)){
                      String result = searcher.search(value);
                      UsageLogger.log(user , value);
                      
                      return result;
                  }

                  return null;
              }
          }

          /**
           * 對客戶端的訪問進行驗證
           */
          class AccessValidator{

              public static boolean validate(String user){
                  boolean permission = false;

                  if("admin".equals(user))
                      permission = true;

                  return permission;
              }

          }


          /**
           * 訪問計數
           */
          class UsageLogger{
              /**
               * @param user 用戶名
               * @param value 搜索的內容
               */
              public static void log(String user , String value){
                  String sql;
                  sql = "INSERT INTO usage(user , value)  values('";
                  sql += user + "' , '" + value + "')";
                  //執行SQL: stmt.executeUpdate(sql);   
              }
          }

          運行結果:
          result:null
          result:sample result
          posted on 2009-06-29 22:31 天堂露珠 閱讀(662) 評論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 手游| 利辛县| 汝州市| 广昌县| 临安市| 四子王旗| 温泉县| 西平县| 板桥市| 五大连池市| 嘉鱼县| 瓮安县| 靖边县| 额敏县| 德江县| 炉霍县| 班玛县| 铜川市| 儋州市| 金门县| 萝北县| 微博| 东源县| 石狮市| 微山县| 松桃| 汶川县| 东宁县| 凤山县| 荥阳市| 云林县| 磐安县| 个旧市| 安福县| 定结县| 阜新| 大石桥市| 公安县| 漯河市| 德江县| 北流市|