• 代理模式介绍及具体实现(设计模式 三)


    代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问

    实例介绍和实现过程

    假设我们正在开发一个电子商务网站,其中有一个商品库存管理系统。我们希望在每次查询商品库存之前,先进行权限验证,以确保只有授权用户可以访问库存信息。这时候可以使用代理模式来实现。

    1、首先,定义一个商品库存接口:

    1. public interface Inventory {
    2. //被代理的功能
    3. int getStock(String productId);
    4. }

    2、创建真实的库存管理类,实现该接口

    1. public class InventoryManager implements Inventory {
    2. //实际的功能
    3. @Override
    4. public int getStock(String productId) {
    5. // 实际的库存查询逻辑
    6. return 100;
    7. }
    8. }

    3、创建一个代理类,该代理类实现功能的接口,用于进行权限验证并调用真实的库存管理类

    1. public class InventoryProxy implements Inventory {
    2. //被代理的类引用
    3. private Inventory inventory;
    4. private String username;
    5. private String password;
    6. //初始化代理类
    7. public InventoryProxy(String username, String password) {
    8. this.username = username;
    9. this.password = password;
    10. }
    11. //代理的功能
    12. @Override
    13. public int getStock(String productId) {
    14. //实现功能前先进行验证身份
    15. if (authenticate()) {
    16. //验证通过
    17. if (inventory == null) {
    18. inventory = new InventoryManager();
    19. }
    20. //使用功能
    21. return inventory.getStock(productId);
    22. } else {
    23. // 权限验证失败,返回一个特定的值或抛出异常
    24. return -1;
    25. }
    26. }
    27. //验证方法
    28. private boolean authenticate() {
    29. // 进行权限验证的逻辑
    30. // 这里假设验证逻辑为管理员身份才能操作
    31. return username.equals("admin") && password.equals("admin");
    32. }
    33. }

    4、使用功能

    1. public class Main {
    2. public static void main(String[] args) {
    3. //创建代理类
    4. Inventory inventory = new InventoryProxy("admin", "admin");
    5. //执行操作
    6. int stock = inventory.getStock("10");
    7. System.out.println("操作结果: " + stock);
    8. }
    9. }
  • 相关阅读:
    Nginx.conf设置nginx优化(二)
    K8S:本质
    如何在 PyQt 中实现异步数据库请求
    gitignore文件不生效问题
    经典TopK问题、优先级队列 与 堆的纠葛一文为你解惑——数据结构
    国产分布式数据库在证券行业的应用及实践
    C++引用用法学习笔记
    轮廓检测及透视变换
    AtCoder Beginner Contest 275(C,E 补)
    react 实战- 玩转 react 全家桶(进阶)学习
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133435847