设计模式详解:代理模式

1. 什么是代理模式?

代理模式(Proxy Pattern)是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。代理模式在客户端和目标对象之间引入了一个代理对象,客户端通过代理对象间接地访问目标对象,从而提供了一种间接访问的方式。

在代理模式中,代理对象拥有与目标对象相同的接口,客户端与代理对象进行交互,代理对象再将请求传递给目标对象。通过这种方式,代理对象可以在不改变目标对象接口的前提下,对目标对象的访问进行控制和扩展。

2.代理模式代码设计

java 复制代码
/**
 * @Author: stukk
 * @Description: 目标对象接口
 * @DateTime: 2023-12-25 16:54
 **/
public interface Subject {
    void request();
}

/**
 * @Author: stukk
 * @Description: 目标对象的实现
 * @DateTime: 2023-12-25 16:57
 **/
public class RealSubject implements Subject {

    @Override
    public void request() {
        System.out.println("我是被代理的对象,也就是目标对象");
    }
}


/**
 * @Author: stukk
 * @Description: 代理对象
 * @DateTime: 2023-12-25 16:58
 **/
public class Proxy implements Subject {
    private RealSubject realSubject;

    @Override
    public void request() {
        if (realSubject == null){
            realSubject = new RealSubject();
        }
        preRequest();
        realSubject.request();
        postRequest();
    }

    private void preRequest(){
        System.out.println("代理:执行之前要干什么操作呢...");
    }
    private void postRequest(){
        System.out.println("代理:执行之后要干什么操作呢...");
    }
}

/**
 * @Author: stukk
 * @Description: 客户端
 * @DateTime: 2023-12-25 17:00
 **/
public class Client {
    public static void main(String[] args) {
        Subject subject = new Proxy();
        subject.request();
    }
}

3. 代理模式的优点以及应用场景

代理模式的优点包括:

  • 代理模式可以提供额外的间接层,使得客户端与目标对象解耦,增加了系统的灵活性和可维护性。
  • 代理对象可以在不改变目标对象接口的情况下,对目标对象的访问进行控制和扩展,比如添加额外的逻辑、权限验证等。
  • 代理模式可以隐藏目标对象的具体实现细节,提供了更好的封装性和安全性。

应用场景:

spring框架中的AOP(面向切面编程)有使用到代理模式,AOP切面就像是被代理的对象,而切点就是代理对象。

安全代理用于控制对目标对象的访问权限,代理对象可以在访问目标对象之前进行权限检查或身份验证。这种方式可以保护目标对象免受未经授权的访问。

还有日志系统,日志代理用于在访问目标对象时添加日志记录的功能,可以记录方法的调用信息、参数、返回值等。这样可以方便地进行系统跟踪、调试和性能分析。

相关推荐
nnsix12 小时前
设计模式 - 建造者模式 笔记
笔记·设计模式·建造者模式
cui178756813 小时前
矩阵拼团 + 复购拼团:新零售最稳的复购模式,规则简单
大数据·人工智能·设计模式·零售
百珏13 小时前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
likerhood15 小时前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
AI大法师15 小时前
从 Adobe 焕新看品牌系统升级:Logo、主色、字体与产品体验如何重新对齐
大数据·人工智能·adobe·设计模式
贵慜_Derek16 小时前
《从零实现 Agent 系统》连载 03|控制循环:感知—决策—行动—反思
人工智能·设计模式·架构
nnsix17 小时前
设计模式 - 原型模式 笔记
笔记·设计模式·原型模式
nnsix17 小时前
设计模式 - 适配器模式 笔记
笔记·设计模式·适配器模式
asdfg125896317 小时前
一文理解软件开发中的“设计模式”
java·设计模式·软件开发
云飞云共享云桌面18 小时前
SolidWorks 服务器通过云飞云共享云桌面10人研发共享方案
运维·服务器·3d·设计模式·电脑