实际上,上述的Connection也好,Manager也好,我们都不是直接New出来使用的,而是利用HttpClientBuilder来提供丰富而集中的配置生成。先给结论:
代码中有基础的几个类型:Processor,Strategy, Registry, Provider,Resolver,Handler, Interceptor, Exec | Executor, Builder, Factory, Manager,Operator,Context, Config | Verifier | Planner | Store | Matcher
Verifier | Planner | Store | Matcher | Config 是按照特定功能划分的Util型工具类,而且其功能从这几个词的本身含义就能够非常明显的读出来
其中 Strategy 是请求过程中各中处理的应对方法,最终都会汇聚到Exec,再加入到execChain中。
而 Processor + HttpRequestInterceptor 则共同组成了对HTTPRequest的处理链条
Handler:处理器,用于执行特定的处理
Builder, Factory: 生成器,其中Factory倾向于简单的生产,而Builder倾向于很复杂的创建过程
Context:执行环境,本质上是一个Map,用于存储不同信息
Manager: 管理器,让对象执行核心功能,而对象本身则被Manager托管,比如生成、初始化、池化等
Provider:某种对象的提供者
Operator:执行者
Resolver:某种信息的提供者
Registry:本质上是一个Map, 用于注册不同的对象
这其中应用最彻底的就是责任链模式,可以通过这个模式将大多数配置穿起来。
我们来看一下最核心的HttpProcessor,代码如下:
private final HttpRequestInterceptor[] requestInterceptors;
private final HttpResponseInterceptor[] responseInterceptors;
|