• 设计模式中的静态代理设计模式
  • 发布于 2个月前
  • 107 热度
    0 评论
引言
无论在系统设计或者代码开发中都有着代理设计模式的身影。比如在路由反向代理服务器、Spring框架中的AOP思维。今天来记录一下另一个简单的设计模式-静态代理设计模式(Proxy Pattern)

静态代理模式
代理属于结构型模式的一种。它提供了一种替身或占位符来控制对被代理对象的访问。通过代理可以添加额外的功能,比如访问控制、日志记录、延迟加载、权限校验等,而不会改变原始对象的接口和功能。按照种类,代理可以分为静态代理和动态代理,首先来介绍下静态代理。

静态代理:代理类在编译期间就已经确定,开发人员需要为每一个目标类手动编写对应的代理类。这种代理类通常和目标类实现相同的接口或继承相同的父类。

代码实例如下:
/**
 * @堆代码 duidaima.com
 * @date 2024/6/6 17:47
 */
public class StaticProxy {
    public static void main(String[] args) {
        RealRequest realRequest = new RealRequest();
        realRequest.request();
        System.out.println();
        ProxyRequest proxyRequest = new ProxyRequest(realRequest);
        proxyRequest.request();
    }
}
// 接口
interface Subject{
    void request();
}
// 目标类
class RealRequest implements Subject{
    @Override
    public void request() {
        System.out.println("RealSubject: Handing request.");
    }
}
// 代理类
class ProxyRequest implements Subject{
    private RealRequest realRequest;
    public ProxyRequest(RealRequest realRequest){
        this.realRequest = realRequest;
    }
    @Override
    public void request() {
        preRequest();
        realRequest.request();
        postRequest();
    }
    private void preRequest() {
        System.out.println("Proxy: Pre-processing request.");
    }
    private void postRequest() {
        System.out.println("Proxy: Post-processing request.");
    }
}
代码解析:
• StaticProxy类:包含主函数main,用于展示静态代理模式的使用。
• Subject接口:定义了真实主题和代理主题共同实现的接口,这里只有一个方法request()。
• RealRequest类:实现了Subject接口,代表真实的请求处理对象,实现了具体的业务逻辑。
• ProxyRequest类:同样实现了Subject接口,作为RealRequest的代理,增加了额外的处理逻辑,即在调用真实对象的request方法前后分别执行预处理preRequest和后处理postRequest。

小结
由于代理类和真实主题类的关系在编译期间就已经确定,如果需要为多个真实主题类创建代理,则需要为每个真实主题类编写对应的代理类,这可能导致代码量增加,优点在于实现简单直观。
用户评论