
/**
* 版权所有 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);
}/**
* 版权所有 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 涂聚文";
}
}/**
* 版权所有 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;
}
}
}/**
* 版权所有 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();
}
}/**
* 版权所有 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();
}
}调用测试:
//代理模式
searcher = new Proxy();
String userId = "geovindu";
String searchType = "SEARCH_BY_ACCOUNT_NUMBER";
String result = searcher.doSearch(userId, searchType);
System.out.println(result);输出:
已在保存日志!操作用户 geovindu
result set 涂聚文