设计模式详解:代理模式

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切面就像是被代理的对象,而切点就是代理对象。

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

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

相关推荐
杨充1 天前
10.可测试性实战设计
设计模式·开源·代码规范
杨充1 天前
9.重构十二式的实战
设计模式·开源·代码规范
杨充1 天前
6.设计原则的全景图
设计模式·开源·全栈
杨充1 天前
2.面向对象的特性
设计模式
杨充1 天前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充1 天前
8.反模式与坏味道
设计模式·开源·代码规范
杨充1 天前
3.接口vs抽象类比较
设计模式
咖啡八杯1 天前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
咖啡八杯2 天前
GoF设计模式——解释器模式
java·后端·spring·设计模式