Java中代理对象

静态代理

静态代理通常用于对原有业务逻辑的扩充 ,通过对真实对象的封装,来实现扩展性。

三要素:

共同接口
public interface Action{
    void doSomething();
}
真实对象
public class RealObject implements Action{
    
    public void doSomething(){
        System.out.println("do somethings");
    }
}
代理对象
public class Proxy implements Action{
    private Action action;
    public Proxy(){
        this.action = RealObject()
    }
    
    public void doSomething() {
        System.out.println("proxy do");
        realObject.doSomething();
    }
}

动态代理

基本用法:

public class DynamicProxyHandler implements InvocationHandler {
    private Object realObject;

    public DynamicProxyHandler(Object realObject) {
        this.realObject = realObject;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //代理扩展逻辑
        System.out.println("proxy do");

        return method.invoke(realObject, args);
    }
}
public static void main(String[] args) {
        RealObject realObject = new RealObject();
        Action proxy = (Action) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Action.class}, new DynamicProxyHandler(realObject));
        proxy.doSomething();
}

静态代理类与装饰者模式进行对比

  • 静态代理类与装饰者之间的共同点:

​ (1)都要实现与目标类相同的业务接口

​ (2)在俩个类中都要声明目标对象

​ (3)都可以在不修改目标类的前提下增强目标方法

  • 静态代理类与装饰者,之间的不同点:

    (1)目的不同,装饰者,简单说,就是为了增强目标对象 ; 静态代理的使用目的是为了保护和隐藏目标对象
    (2)对于目标对象的获取方式不同: 装饰者中目标对象的获取,通过代参构造器传入,静态代理类中,是在无参构造器中直接创建。
    (3)功能增强的实现者不同 装饰者设计模式中存在装饰者基类,其并不能实现增强,而是由具体的装饰者进行增强的,所以其存在着"装饰者链"; 而静态代理中,一般不存在父子类的关系,具体的增强,就是由代理类实现的。无需其子类完成,所以不存在 链 的概念。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值