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

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

相关推荐
草履虫建模11 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
qq_2975746714 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚14 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学14 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang2015092814 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚14 小时前
Java入门17——异常
java·开发语言
缘空如是14 小时前
基础工具包之JSON 工厂类
java·json·json切换
追逐梦想的张小年15 小时前
JUC编程04
java·idea
好家伙VCC15 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
南极星100515 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言