okhttp
okhttp库的火热程度,相信不需要我多作说明了,网上关于该库的使用和源码分析的文章有如恒河沙数。我就不在这方面凑热闹了,本文从设计模式的角度来谈谈okhttp中都能找到哪些模式。本文所示okhttp版本为3.11.0。
builder
这个应该是很明显的了。Okhttpclient
、request
、response
、Multipartbody
、HttpUrl
等等随处可见,还如下面表示定义在RFC 6265中的cookie的类:
public final class Cookie {
...
public static final class Builder {
...
}
}
本来HTTP是无状态的,但是通过cookie机制,可以让HTTP有状态,比如保持用户登录状态信息。遗憾的是,许多服务器实现并没有使用cookie来保存用户登录状态,而是使用其它一些自定义的请求头。
Factory Method
如果简单工厂也算设计模式的话,在okhttp中倒是有很多。不过工厂方法却用的不多。下面是其中2个:
public interface Call extends cloneable {
...
interface Factory {
Call newCall(Request request);
}
}
public interface Websocket {
...
interface Factory {
WebSocket newWebSocket(Request request, WebSocketListener listener);
}
}
Observer
观察者有两个,一个是EventListener
,另一个是WebSocketListener
。两者都可以看作是生命周期监听器,前者监听请求/响应,后者监听web socket。
public abstract class EventListener {
...
public void requestheadersStart(Call call) {}
public void requestHeadersEnd(Call call, Request request) {}
public void requestBodyStart(Call call) {}
public void requestBodyEnd(Call call, long byteCount) {}
public void responseHeadersStart(Call call) {}
public void responseHeadersEnd(Call call, Response response) {}
public void responseBodyStart(Call call) {}
public void responseBodyEnd(Call call, long byteCount) {}
...
}
上面列出的方法被称作Request Events:
graph LR
requestHeaders --> requestBody
requestBody --> responseHeaders
responseHeaders --> responseBody
Singleton
虽然很不想说,但下面这个确实可以看作是一个单例:no_mouth::
public class Platform {
private static final Platform PLATFORM = findPlatform();
...
public static Platform get() {
return PLATFORM;
}
...
}
Strategy
无论是源码,还是注释中很多地方都有strategy、policy这样的单词,但真正是策略模式的笔者只发现了cookiejar
,定义了管理cookie的方法:
public interface CookieJar {
CookieJar NO_COOKIES = ...
void saveFromResponse(HttpUrl url, List<Cookie> cookies);
List<Cookie> loadForRequest(HttpUrl url);
}
其它诸如cacheStrategy
、ConnectionSpecSelector
,笔者认为都不是策略模式。
okhttp中最核心的部分当属它的HTTP请求拦截器(Interceptor
)了,这里是一个责任链模式。你们以为我要大谈特谈它了吗?错了,本文到这里就算结束了,关于拦截器的内容,网上太多了,我就不去增加重复的信息了。
Written with StackEdit.
文章最后发布于: 2018-09-07 10:12:01
相关阅读
D3介绍D3是用来做web页面可视化的组件,其官方网址为http://d3js.org 安装D3类库的文件只有一个d3.js。下载后直接在html的<script>
概览体验环境:软件版本:3.2.44设备型号:HUAWEI G750-T01操作系统:4.2.2体验时间:2015年8月16日体验人员:龙潇官方应用介绍360手机助手,您
GTX1060 6G/5G/3G区别对比 老黄这刀法也没谁了
GTX 1060可以说是10系列显卡中最让人无语的一个系列,也是唯一一个有三个版本型号的10系列,估计也只有NV这种大佬才敢这样肆意的放纵
Microsoft Office 2016 四合一绿色精简版32/64位
点击下载出处:Microsoft Office 2016 四合一绿色精简版电脑必备软件之一,office系列,永远是你电脑不可缺少的一款软件。作为微软家的
打印机系那个药打印6寸的照片,但是竖着放不进纸或夹纸,横着放可以正常进纸打印,但是没有横着放的纸张尺寸设置,该怎么自己设置6寸的纸