[關(guān)鍵字]:java,design pattern,設(shè)計(jì)模式,《Java與模式》學(xué)習(xí),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
*
* 在搜索的時(shí)需要進(jìn)行進(jìn)行權(quán)限認(rèn)證和使用計(jì)數(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;
/**
* 實(shí)際執(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ù)庫(kù)中執(zhí)行實(shí)際搜索,
//此只是示例代碼。
String result = "sample result";
return result;
}
}
ProxySearcher.java:
package pattern.proxy.smart;
/**
* 代理搜索
* 將搜索傳遞給RealSearcher并對(duì)調(diào)用進(jìn)行驗(yàn)證和計(jì)數(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;
}
}
/**
* 對(duì)客戶端的訪問進(jìn)行驗(yàn)證
*/
class AccessValidator{
public static boolean validate(String user){
boolean permission = false;
if("admin".equals(user))
permission = true;
return permission;
}
}
/**
* 訪問計(jì)數(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);
}
}
運(yùn)行結(jié)果:
result:null
result:sample result
posted on 2009-06-29 22:31
天堂露珠 閱讀(655)
評(píng)論(0) 編輯 收藏 所屬分類:
Pattern