首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java: Proxy Patterns

Java: Proxy Patterns

作者头像
geovindu
发布2026-06-18 21:14:31
发布2026-06-18 21:14:31
1410
举报
代码语言:javascript
复制
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * Proxy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Searcher.java
 *
 * */
 
 
package com.javapatterns.proxy;
 
 
/**
 * 抽象主题
 * @author geovindu
 * */
public interface Searcher
{
    /**
     * 声明一个抽象方法
     * */
    String doSearch(String userId, String searchType);
}

代码语言:javascript
复制
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 *  Proxy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc RealSearcher.java
 *
 * */
 
 
package com.javapatterns.proxy;
 
/**
 *真实主题
 * @author geovindu
 *
 * */
public class RealSearcher  implements Searcher{
 
 
    /**
     *
     *构造子
     * */
    public RealSearcher()
    {
    }
    /**
     *
     *真实的查询的工作在这里发生
     * @param userId
     * @param keyValue
     * @return
     * */
    public String doSearch(String userId, String keyValue)
    {
        String sql = "SELECT * FROM data_table WHERE key_col = '" + keyValue + "'";
 
        //execute this SQL Statement and concatenate a result string
        return "result set 涂聚文";
    }
 
}
代码语言:javascript
复制
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 *  Proxy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc AccessValidator.java
 *
 * */
 
 
package com.javapatterns.proxy;
/**
 *用户权限检查对象
 * @author geovindu
 * */
public class AccessValidator {
    /**
     *
     *用户权限检查
     * */
    public boolean vaidateUser(String userId)
    {
        if (userId.equals("geovindu"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
 
}
代码语言:javascript
复制
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 *  Proxy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc UsageLogger.java
 *
 * */
 
 
package com.javapatterns.proxy;
/**
 *
 *
 * */
public class UsageLogger {
 
 
    private String userId;
 
    /**
     *用户Id 赋值方法
     *
     * */
    public void setUserId(String userId)
    {
        this.userId = userId;
    }
    /**
     *保存至日志中
     *
     * */
    public void save()
    {
        String sql = "INSERT INTO USAGE_TABLE (user_id) " +
                " VALUES(" + userId + ")";
         System.out.println("已在保存日志!操作用户 "+userId);
        //execute this SQL statement
    }
    /**
     *
     *保存至日志中
     * */
    public void save(String userId)
    {
        this.userId = userId;
 
        save();
    }
 
 
}
代码语言:javascript
复制
/**
 * 版权所有 2022 涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * 模式 Proxy Patterns
 * 历史版本: JDK 14.02
 * 2022-09-12 创建者 geovindu
 * 2022-09-12 添加 Lambda
 * 2022-09-12 修改:date
 * 接口类
 * 2022-09-12 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc Proxy.java
 *
 * */
 
package com.javapatterns.proxy;
 
/**
 *角色
 * @author geovindu
 * */
public class Proxy implements Searcher {
 
 
    /**
     * @link aggregation
     * @directed
     */
    private RealSearcher searcher;
 
    /**
     * @link aggregation
     * @directed
     */
    private UsageLogger usageLogger;
 
    /**
     * @link aggregation
     * @directed
     */
    private AccessValidator accessValidator;
 
    /**
     *构造子
     *
     * */
    public Proxy()
    {
        searcher = new RealSearcher();
    }
 
    /**
     *实现查询操作
     * @param userId  用户ID
     * @param keyValue  搜索的关键字
     * @return  返回字符串
     * */
    public String doSearch(String userId, String keyValue)
    {
        if (checkAccess(userId))
        {
            String result = searcher.doSearch(null, keyValue);
            logUsage(userId);
 
            return result;
        }
        else
        {
            return null;
        }
    }
 
    /**
     *查询前的权限操作
     * @param userId  用户ID
     * @return  逻辑真假
     * */
    private boolean checkAccess(String userId)
    {
        accessValidator = new AccessValidator();
 
        return accessValidator.vaidateUser(userId);
    }
 
    /**
     *查询后的日日操作(登记)
     * @param userId  用户ID
     *
     * */
    private void logUsage(String userId)
    {
        UsageLogger logger = new UsageLogger();
 
        logger.setUserId(userId);
 
        logger.save();
    }
 
}

调用测试:

代码语言:javascript
复制
//代理模式
searcher = new Proxy();
String userId = "geovindu";
String searchType = "SEARCH_BY_ACCOUNT_NUMBER";
String result = searcher.doSearch(userId, searchType);
System.out.println(result);

输出:

代码语言:javascript
复制
已在保存日志!操作用户 geovindu
result set 涂聚文
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档