滴答滴:设计模式我是边学边记录,有问题的欢迎大家指出。学习的过程中会借助AI工具,我想说的是我们要把AI工具当作一个学识渊博的学者或者一个便捷的工具,同时要敢于质疑它,不能盲目的觉得对方说的一定是正确的,因为有时它的回答不见得是正确的,我们要带着自己的思考去使用AI工具,不断的和它对话和探讨,最终得出我们想要的答案。
一.什么是代理模式
代理模式是一种常用的结构型设计模式(关注类或对象的组合),允许通过代理对象来控制对另一个对象的访问,代理对象充当客户端与实际对象之间的中介,用于在客户端和实际对象之间添加一层间接层。
代理模式的核心思想是在客户端和目标对象之间引入一个代理对象,这个代理对象可以在调用目标对象的方法前后执行一些额外的操作,如日志记录、安全检查、事务管理等。通过这种方式,可以在不修改目标对象代码的情况下,增加额外的功能或控制。
大白话:代理模式就像是我们生活中找中介帮忙办事一样,代理模式中的“代理”就是那个中介,它替我们(客户端)去和目标对象打交道,并在这个过程中可以添加一些额外的操作,比如找房源、做质量检测等。想象一下,你想要买一套二手房,但自己去找房源、做质量检测、办理过户等手续既费时又费力。这时,你找到了一个中介公司,他们负责帮你找房源、检查房屋质量、协助你办理过户等手续,而你只需要选择心仪的房子并支付费用。在这个过程中,中介公司就是你的代理,它替你完成了原本需要你自己去做的繁琐工作。
二.代理模式分类
1.静态代理
静态代理是在代码编译阶段就已经生成了代理类,代理类需要实现与目标对象相同的接口。它可以在不修改目标对象的前提下对目标对象的方法进行增强。
代理模式中有抽象目标接口,目标对象,代理对象,
代码示例
// 目标接口
interface Subject {
void request();
}
// 目标对象
class RealSubject implements Subject {
@Override
public void request() {
System.out.println("处理真实的请求");
}
}
// 代理类
class ProxySubject implements Subject {
private RealSubject realSubject;
public ProxySubject(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
// 在调用目标对象的方法之前,可以添加一些自定义的操作
preRequest();
// 调用目标对象的方法
realSubject.request();
// 在调用目标对象的方法之后,可以添加一些自定义的操作
postRequest();
}
private void preRequest() {
System.out.println("请求前的预处理");
}
private void postRequest() {
System.out.println("请求后的处理");
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
ProxySubject proxySubject = new ProxySubject(realSubject);
proxySubject.request(); // 输出:请求前的预处理,处理真实的请求,请求后的处理
}
}