Java设计模式之代理模式

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

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

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

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

java 复制代码
// 抽象主题
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();
    }
}

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

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

相关推荐
雨落在了我的手上几秒前
如何学习java?
java·开发语言·学习
范什么特西42 分钟前
计算机杂记
java
RyFit1 小时前
SpirngAI
java
庞轩px1 小时前
第六篇:Spring用了哪些设计模式?——从单例到代理,拆解框架中的经典设计
java·spring·设计模式·bean·代理模式·aop·单例
番石榴AI1 小时前
纯 CPU 推理!0.1B 超轻量级端到端OCR模型,使用 Java 进行文档解析
java·开发语言·ocr
多加点辣也没关系1 小时前
设计模式-工厂方法模式
设计模式·工厂方法模式
likerhood1 小时前
ConcurrentHashMap详细讲解(java)
java·开发语言·性能优化
源码集结号2 小时前
基于 Spring Boot + JPA + MySQL的上门家政系统代码示例
java·前端·后端
程序员老邢3 小时前
【技术底稿 32】Nginx 经典大坑复盘:本机公网域名自环代理,导致接口返回首页 / 404 实战排障
java·运维·nginx·前后端分离·技术底稿·后端部署
该昵称用户已存在4 小时前
从成本中心到价值引擎:MyEMS 开源系统激活企业能源数据资产
java·后端·struts