代理模式
- 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。对于代理模式可以分为两大类,分别是静态代理和动态代理。下面就开始对这两种类型的代理模式进行详细介绍。
静态代理
在这里通过一个场景来展开描述代理模式。现在我想按照自己想要的配置来组装一台电脑。于是我将主板,内存条,显卡,机箱,显示器等所有的配件都买回来了。可是这个时候遇到了一个难题,我不会组装呀。于是我带着这些配件去找专业人士为我组装电脑。对于电脑的组装内部细节部分步骤比较多。在这里作为举例说明,将组装电脑的过程主要分为三个步骤。这三个步骤分别是安装主机,设置显示器,安装操作系统。
静态代理通用模式
- ISubject(抽象主题类):在这个类中,主要声明真实主题类和代理类的共同方法。它既可以是一个接口也可以是一个抽象类。
- RealSubject(真实主题类):这是被代理类,具体的业务实现都在这个类中。
- Proxy(代理类):这是一个代理类,在这个代理类中它持有真实主题类的对象。通过调用真实主题类的方法来实现代理。
抽象主题类
public interface ISubject {
public void request();
}
实现抽象主题的真实类
public class RealSubject implements ISubject{
@Override
public void request() {
System.out.println("我是真实对象");
}
}
代理类
public class Proxy implements ISubject{
private ISubject subject;
public Proxy(ISubject subject) {
this.subject = subject;
}
@Override
public void request() {
this.subject.request();
}
}
调用代码
ISubject subject = new RealSubject();
Proxy proxy = new Proxy(subject);
proxy.request();
Rxjava 适配器模式
- 通过源码分析,可以发现在Retrofit中,通过接口定义对某个对象的请求后,第一步是通过动态代理与注解将元数据进行解析并拼装成请求的包装类OkHttpCall,第二步通过适配器实现OkHttpCall到其它类型(比如RxJava等第三方库)的适配转换.