隨筆 - 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
          主站蜘蛛池模板: 宣城市| 静安区| 绍兴市| 卫辉市| 富宁县| 宁安市| 长阳| 万山特区| 丹阳市| 莎车县| 略阳县| 盖州市| 吉安县| 贵州省| 阳原县| 沭阳县| 明溪县| 建德市| 阳新县| 古蔺县| 扎赉特旗| 岱山县| 海盐县| 台安县| 阳新县| 龙口市| 兴隆县| 拜城县| 察雅县| 梧州市| 连城县| 上杭县| 类乌齐县| 北碚区| 文化| 吕梁市| 新密市| 贵德县| 宜兴市| 合江县| 白银市|