OkHttp 还实现了一个缓存机制,用于存储 HTTP 响应。缓存中的每个条目都是一个 CacheEntry 对象。这些缓存条目会被多个请求共享,这也是享元模式的一个应用。
public final class Cache {
    private final Map<String, CacheEntry> cacheMap = new LinkedHashMap<>();
    private final long maxSize;
    private final long maxAgeSeconds;
    // 省略其他代码
    synchronized CacheEntry get(Request request) {
        String key = request.url().toString();
        return cacheMap.get(key);
    }
    synchronized void put(Request request, Response response) {
        String key = request.url().toString();
        cacheMap.put(key, new CacheEntry(response));
        if (cacheMap.size() > maxSize) {
            evict();
        }
    }
    private void evict() {
        Iterator<Map.Entry<String, CacheEntry>> iterator = cacheMap.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, CacheEntry> entry = iterator.next();
            if (entry.getValue().isExpired()) {
                iterator.remove();
            } else {
                break;
            }
        }
    }
}在上述代码中,Cache 类使用一个 LinkedHashMap 来存储缓存条目。当需要获取或存储缓存时,都会检查或更新相应的缓存条目。这种共享缓存条目的方式减少了内存的使用,并提高了缓存命中率。










