[關(guān)鍵字]:java,design pattern,設(shè)計模式,《Java與模式》學習,Proxy Pattern,代理模式
[環(huán)境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:
智能引用代理:
SmartProxyTest.java(并不屬于pattern.proxy.smart包):
import pattern.proxy.smart.*;
/**
* 智能引用代理:Smart Proxy
*
* 在搜索的時需要進行進行權(quán)限認證和使用計數(shù)
*
* @version 2009-6-29
* @author Winty(wintys@gmail.com)
*/
public class SmartProxyTest{
public static void main(String[] args){
String result;
Searcher searcher;
//未授權(quán)訪問
searcher = new ProxySearcher("anonymous");
result = searcher.search("abc");
System.out.println("result:" + result);
//授權(quán)訪問
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 要搜索的內(nèi)容
*/
public String search(String value);
}
RealSearcher.java:
package pattern.proxy.smart;
/**
* 實際執(zhí)行搜索的類。
* 為了避免客戶端直接使用,本類沒有設(shè)置為public
* @version 2009-6-29
* @author Winty(wintys@gmail.com) http://wintys.blogjava.net
*/
class RealSearcher implements Searcher{
@Override
public String search(String value){
//在這里可以根據(jù)value到數(shù)據(jù)庫中執(zhí)行實際搜索,
//此只是示例代碼。
String result = "sample result";
return result;
}
}
ProxySearcher.java:
package pattern.proxy.smart;
/**
* 代理搜索
* 將搜索傳遞給RealSearcher并對調(diào)用進行驗證和計數(shù)
*
* @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;
}
}
/**
* 訪問計數(shù)
*/
class UsageLogger{
/**
* @param user 用戶名
* @param value 搜索的內(nèi)容
*/
public static void log(String user , String value){
String sql;
sql = "INSERT INTO usage(user , value) values('";
sql += user + "' , '" + value + "')";
//執(zhí)行SQL: stmt.executeUpdate(sql);
}
}
運行結(jié)果:
result:null
result:sample result
posted on 2009-06-29 22:31
天堂露珠 閱讀(655)
評論(0) 編輯 收藏 所屬分類:
Pattern