• Java设计模式之代理模式


    代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问。代理模式在软件开发中经常被使用,它可以提供额外的功能,例如远程访问、延迟加载、访问控制和日志记录等。

    代理模式涉及三个主要角色:

    1. 抽象主题(Subject):定义了真实主题和代理主题之间的共同接口,这样代理对象就可以通过实现该接口来替代真实主题。
    2. 真实主题(Real Subject):定义了代理对象所代表的真实对象。代理对象将请求转发给真实主题对象,从而完成实际的操作。
    3. 代理(Proxy):维护一个引用,使得代理可以访问真实主题,并提供与真实主题相同的接口,以便代理对象可以替代真实主题对象。

    下面是一个简单的示例,展示了如何使用代理模式实现对敏感信息的访问控制:

    // 抽象主题
    public interface SensitiveInformation {
        void access();
    }
    
    // 真实主题
    public class SensitiveInformationImpl implements SensitiveInformation {
        @Override
        public void access() {
            System.out.println("访问敏感信息");
        }
    }
    
    // 代理
    public class SensitiveInformationProxy implements SensitiveInformation {
        private SensitiveInformation realSubject;
    
        public SensitiveInformationProxy() {
            this.realSubject = new SensitiveInformationImpl();
        }
    
        @Override
        public void access() {
            if (checkAccess()) {
                realSubject.access();
            } else {
                System.out.println("无权访问敏感信息");
            }
        }
    
        private boolean checkAccess() {
            // 检查访问权限的逻辑
            return false;
        }
    }
    
    // 客户端代码
    public class Client {
        public static void main(String[] args) {
            SensitiveInformation proxy = new SensitiveInformationProxy();
            proxy.access();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    在上面的示例中,SensitiveInformation 是抽象主题接口,定义了访问敏感信息的方法 access()SensitiveInformationImpl 是真实主题类,实现了抽象主题接口,并提供了实际的敏感信息访问逻辑。SensitiveInformationProxy 是代理类,实现了抽象主题接口,并在 access() 方法中添加了访问控制的逻辑,只有在满足访问权限的条件下才会调用真实主题的 access() 方法。

    通过使用代理模式,我们可以在不修改真实主题代码的情况下,通过代理对象来控制对真实主题的访问。这种方式可以提供更好的灵活性和安全性。

  • 相关阅读:
    SpringMVC框架学习
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    mysql索引为啥使用B+tree?
    FPGA verilog 临近插值任意比例视频缩放代码
    数据结构之单链表
    Postgresql中JSON数据构造与操作符实例
    Golang中的GC原理(介于三个不同版本)
    Android11 设置默认热点名称和热点密码、密码长度
    【MLT】MLT多媒体框架生产消费架构解析(一)
    【飞控开发高级教程4】疯壳·开源编队无人机-360 度翻滚
  • 原文地址:https://blog.csdn.net/kkwyting/article/details/133805330