Android动态代理解析

本文探讨了Android开发中动态代理的概念,解释了如何通过动态代理实现不修改原有对象功能的同时,扩展其行为。介绍了Java的InvocationHandler和Proxy类在动态代理中的作用,并通过Retrofit框架的使用为例,详细阐述了动态代理在实际网络请求中的应用。
摘要由CSDN通过智能技术生成

 

前言:做过Android开发的一般都使用过Retrofit这个三方框架,初一使用,会觉得很神奇:为什么把各个请求定义在一个接口里,通过几行代码就能实现网络请求?答案就是“动态代理”!

 

何为代理?

简单来说代理是一种软件设计模式,某些情况下,我们不希望修改已有对象的功能,但是我们又想在不改变调用者调用方法的情况下,改变调用后的具体实现逻辑,因此,我们会采用间接访问来实现目的。比如A类实现了IHelloWorld接口,有一个helloWorld方法,但在使用的时候并不直接调用a.helloWorld(),而是通过定一个同样实现了IHelloWorld接口的代理类B,在B的helloWorld方法中调用A的helloWorld方法,并夹带一些自己的私货。

//共同实现的接口
public interface IHelloWorld {
    public void helloWorld(String str);
}

//真实对象
public class RealSubject implements IHelloWorld {
    @Override
    public void helloWorld() {
        System.out.println("RealSubject say hello world");
    }
}

//代理对象
public class Proxy implements IHelloWorld {    
    private IHelloWorld subject;

    public Proxy(IHelloWorld subject) {
        this.subject = subject;
    }

    @Override
    public void helloWorld() {
        //代理类的私货
        System.out.println("Proxy say hello world");  
     
        //被代理对象的真实调用
        subject.helloWorld();
    }
}


//实际调用
public static void main(String[] args) {
    //被代理的对象
    RealSubject realSubject = new RealSubject();

    //代理类对象
    Proxy proxy = new Proxy(realSubject);

    //调用代理类对象的方法
    proxySubject.helloWorld();
}

一般的代理,就是这样的逻辑和实现。但是,如果如果需要代理的方法成百上千,总不能每一个方法都写一遍吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值