必威体育Betway必威体育官网
当前位置:首页 > IT技术

okhttp3中的设计模式

时间:2019-10-24 21:45:44来源:IT技术作者:seo实验室小编阅读:74次「手机版」
 

okhttp

okhttp库的火热程度,相信不需要我多作说明了,网上关于该库的使用和源码分析的文章有如恒河沙数。我就不在这方面凑热闹了,本文从设计模式的角度来谈谈okhttp中都能找到哪些模式。本文所示okhttp版本为3.11.0。

builder

这个应该是很明显的了。OkhttpclientrequestresponseMultipartbodyHttpUrl等等随处可见,还如下面表示定义在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);
}

其它诸如cacheStrategyConnectionSpecSelector,笔者认为都不是策略模式。

Chain of Responsibility

okhttp中最核心的部分当属它的HTTP请求拦截器(Interceptor)了,这里是一个责任链模式。你们以为我要大谈特谈它了吗?错了,本文到这里就算结束了,关于拦截器的内容,网上太多了,我就不去增加重复的信息了。

Written with StackEdit.

文章最后发布于: 2018-09-07 10:12:01

相关阅读

D3介绍

D3介绍D3是用来做web页面可视化的组件,其官方网址为http://d3js.org 安装D3类库的文件只有一个d3.js。下载后直接在html的<script>

360手机助手产品体验报告

概览体验环境:软件版本: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系列,永远是你电脑不可缺少的一款软件。作为微软家的

爱普生L360打印机怎么打印6寸照片?

打印机系那个药打印6寸的照片,但是竖着放不进纸或夹纸,横着放可以正常进纸打印,但是没有横着放的纸张尺寸设置,该怎么自己设置6寸的纸

分享到:

栏目导航

推荐阅读

热门阅读