• Java: Proxy Patterns


    1. /**
    2. * 版权所有 2022 涂聚文有限公司
    3. * 许可信息查看:
    4. * 描述:
    5. * Proxy Patterns
    6. * 历史版本: JDK 14.02
    7. * 2022-09-12 创建者 geovindu
    8. * 2022-09-12 添加 Lambda
    9. * 2022-09-12 修改:date
    10. * 接口类
    11. * 2022-09-12 修改者:Geovin Du
    12. * 生成API帮助文档的指令:
    13. *javadoc - -encoding Utf-8 -d apidoc Searcher.java
    14. *
    15. * */
    16. package com.javapatterns.proxy;
    17. /**
    18. * 抽象主题
    19. * @author geovindu
    20. * */
    21. public interface Searcher
    22. {
    23. /**
    24. * 声明一个抽象方法
    25. * */
    26. String doSearch(String userId, String searchType);
    27. }
    1. /**
    2. * 版权所有 2022 涂聚文有限公司
    3. * 许可信息查看:
    4. * 描述:
    5. * Proxy Patterns
    6. * 历史版本: JDK 14.02
    7. * 2022-09-12 创建者 geovindu
    8. * 2022-09-12 添加 Lambda
    9. * 2022-09-12 修改:date
    10. * 接口类
    11. * 2022-09-12 修改者:Geovin Du
    12. * 生成API帮助文档的指令:
    13. *javadoc - -encoding Utf-8 -d apidoc RealSearcher.java
    14. *
    15. * */
    16. package com.javapatterns.proxy;
    17. /**
    18. *真实主题
    19. * @author geovindu
    20. *
    21. * */
    22. public class RealSearcher implements Searcher{
    23. /**
    24. *
    25. *构造子
    26. * */
    27. public RealSearcher()
    28. {
    29. }
    30. /**
    31. *
    32. *真实的查询的工作在这里发生
    33. * @param userId
    34. * @param keyValue
    35. * @return
    36. * */
    37. public String doSearch(String userId, String keyValue)
    38. {
    39. String sql = "SELECT * FROM data_table WHERE key_col = '" + keyValue + "'";
    40. //execute this SQL Statement and concatenate a result string
    41. return "result set 涂聚文";
    42. }
    43. }
    1. /**
    2. * 版权所有 2022 涂聚文有限公司
    3. * 许可信息查看:
    4. * 描述:
    5. * Proxy Patterns
    6. * 历史版本: JDK 14.02
    7. * 2022-09-12 创建者 geovindu
    8. * 2022-09-12 添加 Lambda
    9. * 2022-09-12 修改:date
    10. * 接口类
    11. * 2022-09-12 修改者:Geovin Du
    12. * 生成API帮助文档的指令:
    13. *javadoc - -encoding Utf-8 -d apidoc AccessValidator.java
    14. *
    15. * */
    16. package com.javapatterns.proxy;
    17. /**
    18. *用户权限检查对象
    19. * @author geovindu
    20. * */
    21. public class AccessValidator {
    22. /**
    23. *
    24. *用户权限检查
    25. * */
    26. public boolean vaidateUser(String userId)
    27. {
    28. if (userId.equals("geovindu"))
    29. {
    30. return true;
    31. }
    32. else
    33. {
    34. return false;
    35. }
    36. }
    37. }
    1. /**
    2. * 版权所有 2022 涂聚文有限公司
    3. * 许可信息查看:
    4. * 描述:
    5. * Proxy Patterns
    6. * 历史版本: JDK 14.02
    7. * 2022-09-12 创建者 geovindu
    8. * 2022-09-12 添加 Lambda
    9. * 2022-09-12 修改:date
    10. * 接口类
    11. * 2022-09-12 修改者:Geovin Du
    12. * 生成API帮助文档的指令:
    13. *javadoc - -encoding Utf-8 -d apidoc UsageLogger.java
    14. *
    15. * */
    16. package com.javapatterns.proxy;
    17. /**
    18. *
    19. *
    20. * */
    21. public class UsageLogger {
    22. private String userId;
    23. /**
    24. *用户Id 赋值方法
    25. *
    26. * */
    27. public void setUserId(String userId)
    28. {
    29. this.userId = userId;
    30. }
    31. /**
    32. *保存至日志中
    33. *
    34. * */
    35. public void save()
    36. {
    37. String sql = "INSERT INTO USAGE_TABLE (user_id) " +
    38. " VALUES(" + userId + ")";
    39. System.out.println("已在保存日志!操作用户 "+userId);
    40. //execute this SQL statement
    41. }
    42. /**
    43. *
    44. *保存至日志中
    45. * */
    46. public void save(String userId)
    47. {
    48. this.userId = userId;
    49. save();
    50. }
    51. }
    1. /**
    2. * 版权所有 2022 涂聚文有限公司
    3. * 许可信息查看:
    4. * 描述:
    5. * 模式 Proxy Patterns
    6. * 历史版本: JDK 14.02
    7. * 2022-09-12 创建者 geovindu
    8. * 2022-09-12 添加 Lambda
    9. * 2022-09-12 修改:date
    10. * 接口类
    11. * 2022-09-12 修改者:Geovin Du
    12. * 生成API帮助文档的指令:
    13. *javadoc - -encoding Utf-8 -d apidoc Proxy.java
    14. *
    15. * */
    16. package com.javapatterns.proxy;
    17. /**
    18. *角色
    19. * @author geovindu
    20. * */
    21. public class Proxy implements Searcher {
    22. /**
    23. * @link aggregation
    24. * @directed
    25. */
    26. private RealSearcher searcher;
    27. /**
    28. * @link aggregation
    29. * @directed
    30. */
    31. private UsageLogger usageLogger;
    32. /**
    33. * @link aggregation
    34. * @directed
    35. */
    36. private AccessValidator accessValidator;
    37. /**
    38. *构造子
    39. *
    40. * */
    41. public Proxy()
    42. {
    43. searcher = new RealSearcher();
    44. }
    45. /**
    46. *实现查询操作
    47. * @param userId 用户ID
    48. * @param keyValue 搜索的关键字
    49. * @return 返回字符串
    50. * */
    51. public String doSearch(String userId, String keyValue)
    52. {
    53. if (checkAccess(userId))
    54. {
    55. String result = searcher.doSearch(null, keyValue);
    56. logUsage(userId);
    57. return result;
    58. }
    59. else
    60. {
    61. return null;
    62. }
    63. }
    64. /**
    65. *查询前的权限操作
    66. * @param userId 用户ID
    67. * @return 逻辑真假
    68. * */
    69. private boolean checkAccess(String userId)
    70. {
    71. accessValidator = new AccessValidator();
    72. return accessValidator.vaidateUser(userId);
    73. }
    74. /**
    75. *查询后的日日操作(登记)
    76. * @param userId 用户ID
    77. *
    78. * */
    79. private void logUsage(String userId)
    80. {
    81. UsageLogger logger = new UsageLogger();
    82. logger.setUserId(userId);
    83. logger.save();
    84. }
    85. }

    调用测试:

    1. //代理模式
    2. searcher = new Proxy();
    3. String userId = "geovindu";
    4. String searchType = "SEARCH_BY_ACCOUNT_NUMBER";
    5. String result = searcher.doSearch(userId, searchType);
    6. System.out.println(result);

    输出:

    1. 已在保存日志!操作用户 geovindu
    2. result set 涂聚文

  • 相关阅读:
    [钴击]Cobalt Strike内网渗透工具
    Vue学习:计算属性
    利用cpolar为群晖NAS建立稳定外网地址(1)
    经济数据预测 | Python实现ARIMA时间序列金融市场预测
    python用cv2画图(line, rectangle, text等)
    阿里云存储解决方案,助力轻舟智航“将无人驾驶带进现实”
    解读JVM级别本地缓存Caffeine青出于蓝的要诀 —— 缘何会更强、如何去上手
    Selenium WebUI 自动化测试框架
    超市收银系统源码
    基于SSM的住院病人监测预警信息管理系统毕业设计源码021054
  • 原文地址:https://blog.csdn.net/geovindu/article/details/126917051