代理模式(设计模式详解)

代理模式是一种设计模式,它提供了对原始对象的访问控制和功能增强。代理对象在调用真实对象的方法前后可以添加额外的操作,如保护、增强性能或延迟加载。常见的使用场景包括远程代理、虚拟代理、安全代理、智能代理和消息转发。代理模式与装饰器模式相似但有区别,前者主要关注访问控制,后者专注于功能扩展。
摘要由CSDN通过智能技术生成

描述

代理模式是一种设计模式,它允许在不改变原始对象的情况下,为其提供一个代理对象。代理对象可以控制对原始对象的访问,并在必要时对其进行修改或增强。代理模式的目的是为了保护原始对象,并提供额外的功能或增强其性能。

实现

抽象主题

public interface Subject {
  public void invoke();
}

真实主题

public class RealSubject implements Subject{
    @Override
    public void invoke() {
        System.out.println("Invoke the method");
    }
}

真实主题代理对象

public class SubjectProxy implements Subject {
    private final RealSubject realSubject;

    public SubjectProxy() {
        realSubject = new RealSubject();
    }


    @Override
    public void invoke() {
        System.out.println("Do something before invoke");
        realSubject.invoke();
        System.out.println("Do something after invoke");
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        SubjectProxy proxy = new SubjectProxy();
        proxy.invoke();
    }
}
实验结果

在这里插入图片描述

使用场景

  • 远程代理:当一个对象存在于不同的地址空间中时,可以使用代理模式来将其封装,并在客户端和服务器之间进行通信。

  • 虚拟代理:当一个对象很大或很复杂时,可以使用代理模式来在需要时延迟对象的创建和初始化。

  • 安全代理:可以使用代理模式来控制对敏感对象的访问,以确保只有授权的用户可以访问该对象。

  • 智能代理:可以使用代理模式来添加额外的功能,例如缓存、日志记录、性能优化等,从而提高应用程序的性能和可维护性。

  • 延迟加载:可以使用代理模式来延迟加载对象,从而提高应用程序的性能和响应速度。

  • 消息转发:可以使用代理模式来将消息转发给不同的对象,从而实现消息传递的灵活性。

拓展

代理模式和装饰器模式类似,那么他们的区别是什么?

代理模式的主要目的是控制对对象的访问,而装饰器模式的主要目的是增强对象的功能。

在代理模式中,代理类和原始类具有相同的接口,代理类可以直接调用原始类的方法或者在调用原始类的方法前后添加额外的逻辑。而在装饰器模式中,装饰器类和原始类也具有相同的接口,但装饰器类需要包装原始类,以添加额外的功能,通常是通过将一个对象包装在另一个对象的内部来实现的。

代理模式通常用于在访问原始对象之前进行身份验证、授权、记录日志等操作,以控制对对象的访问。而装饰器模式通常用于在不修改原始对象代码的情况下增强其功能,例如添加缓存、加密、压缩等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值