- /**
- * 版权所有 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 涂聚文