Proxy-Exercise

阅读时长: 2 分钟 358 字

在代理模式中,我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。

\---demo
        DynamicProxyDemo.java
        OneService.java
        Service.java
        StaticProxyDemo.java
        TwoService.java

Service.java

接口,提供perform()方法。

OneService.java

实现类,实现perform()方法。

TwoService.java

实现类,实现perform()方法。

StaticProxyDemo.java(静态代理)

静态代理,里面有一个ServiceProxy类,在该类中也重写了perform()方法。在perform()方法中,调用了真实对象的perform()方法,同时新增了一些操作。

但是静态代理有个缺点:一个真实对象要对应一个静态代理对象,代码编写十分繁琐。

DynamicProxyDemo.java(动态代理)

动态代理,创建实现InvocationHandler接口的类,再通过Proxy.newProxyInstance方法创建代理对象,之后便可以通过代理对象调用perform方法。

区别

静态代理需要为每个接口创建代理类,并为每个方法编写代理逻辑,这会导致大量的重复代码。在实际开发中,当涉及到多个类和方法需要类似的代理逻辑时,通过动态代理来实现通常是更好的选择。动态代理通过创建调用处理器(InvocationHandler)、创建代理实例(Proxy.newProxyInstance),然后便可以直接调用代理方法。

本网站已运行: 计算中...
备案 赣公网安备36072502000191 | 赣ICP备2024040374号
使用 Hugo 构建 · 主题 Stack 由 Jimmy 设计