隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

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

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156311
          • 排名 - 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 天堂露珠 閱讀(661) 評論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 岐山县| 红河县| 扬中市| 焉耆| 宣化县| 玛曲县| 含山县| 会泽县| 隆化县| 张北县| 土默特右旗| 吉首市| 聂荣县| 弥勒县| 得荣县| 宁阳县| 宝山区| 和龙市| 铁岭县| 新平| 汉源县| 广饶县| 黔西| 阳朔县| 东丰县| 晴隆县| 南丰县| 明星| 东乡族自治县| 遂宁市| 科技| 信阳市| 涞源县| 抚州市| 沙洋县| 石屏县| 无极县| 铜山县| 定远县| 万安县| 宁化县|