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() 方法。

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

相关推荐
人活一口气19 小时前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc
像我这样帅的人丶你还21 小时前
Java 后端详解(三):全局异常处理与 JPA 数据库映射
java·后端
NE_STOP1 天前
vibe Coding -- 小项目实战
java
未秃头的程序猿1 天前
Java 26正式发布!这3个新特性,让代码量直接减半
java·后端·面试
ZJPRENO1 天前
吃透软件开发六大设计原则,告别烂代码
设计模式
用户298698530141 天前
Word 文档文本查找与替换的 Java 实现方案
java·后端
阿哉1 天前
Nacos 服务发现源码:藏在背后的两套事件机制,90%的人只讲了一半
java
咖啡八杯1 天前
GoF设计模式——命令模式
java·设计模式·架构
AI人工智能_电脑小能手1 天前
【大白话说Java面试题 第125题】【并发篇】第25题:说说 Java 线程的中断机制
java·后端·面试
Java内核笔记1 天前
Spring Security 源码解析(六)无状态 JWT 实践:Session 共享与自定义过滤器
java·后端