随笔 - 117  文章 - 72  trackbacks - 0

声明:原创作品(标有[原]字样)转载时请注明出处,谢谢。

常用链接

常用设置
常用软件
常用命令
 

订阅

订阅

留言簿(7)

随笔分类(130)

随笔档案(123)

搜索

  •  

积分与排名

  • 积分 - 153018
  • 排名 - 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 天堂露珠 阅读(629) 评论(0)  编辑  收藏 所属分类: Pattern

只有注册用户登录后才能发表评论。


网站导航: