[原]代理模式-智能引用代理

[关键字]:java,design pattern,设计模式,《Java与模式》学习,Proxy Pattern,代理模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty ([email protected]) http://wintys.blogjava.net
[正文]:

智能引用代理:


[原]代理模式-智能引用代理
 


SmartProxyTest.java(并不属于pattern.proxy.smart包):

import pattern.proxy.smart.*;
/**
 * 智能引用代理:Smart Proxy
 *
 * 在搜索的时需要进行进行权限认证和使用计数
 *
 * @version 2009-6-29
 * @author Winty([email protected])
 */
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([email protected]) 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([email protected]) 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([email protected]) 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

你可能感兴趣的:(java,设计模式,sql,.net,Gmail)