隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

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

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155532
          • 排名 - 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 天堂露珠 閱讀(655) 評論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 延川县| 邻水| 龙南县| 雷州市| 怀宁县| 衡阳县| 镇雄县| 洞口县| 泰安市| 登封市| 连州市| 武汉市| 宁化县| 湖州市| 新干县| 太原市| 册亨县| 七台河市| 南宫市| 秭归县| 玛沁县| 东乌珠穆沁旗| 裕民县| 建湖县| 信丰县| 平远县| 苗栗县| 平湖市| 牡丹江市| 舞钢市| 安福县| 邵东县| 上犹县| 淮安市| 南涧| 万山特区| 渭源县| 崇阳县| 肥乡县| 金阳县| 合肥市|