【笔记】手写一个缓存

本文介绍了基于装饰器模式设计的缓存系统,包括Cache接口和四个实现类:PerpetualCache、SynchronizedCache、LoggingCache和LruCache。PerpetualCache是最基础的实现,不考虑线程安全和淘汰算法。SynchronizedCache增加了线程安全支持。LoggingCache用于记录缓存操作的日志,便于跟踪和分析。最后,LruCache实现了LRU淘汰算法,使用LinkedHashMap保持访问顺序。
摘要由CSDN通过智能技术生成

目录

Interface Cache

Class PerpetualCache

Class SynchronizedCache

Class LoggingCache

Class LruCache


前文,我们提到了缓存的5要素

缓存学习入门 笔记_憨憨快递的博客-CSDN博客

  • 对象获取
  • 对对象的引用
  • 缓存结构
  • 线程
  • 淘汰算法

在此基础上,我们大可以开始设计一个属于我们的 缓存结构。

考虑到使用的自由扩展性,采用装饰器模式进行设计。一句题外话,装饰器模式普遍用于设计类间的结构关系,通过自由使用装饰类,类的功能可以自由组成并按需使用,如InputStream系列和 OutputStream系列,是Java中的代表。

Interface Cache

首先,一个Cache接口是不可或缺的。接口规定了,缓存需完成输入输出 ,删除,清空和报告大小的方法。

public interface  Cache <K,V>{
    void putObject(K key, V value);

    V getObject(K key);

    V removeObject(K key);

    void clear();

    int size();
}

Class PerpetualCache

接着,第一个实现类 PerpetualCache 可以被完成了,这个类不考虑线程安全,内部用HashMap实现缓存结构,也没有设计 淘汰算法,为了直观展现参量的内容,一个toString方法是可选的。

import java.util.HashMap;
import java.util.Map;

public class PerpetualCache implements Cache<Object, Object> {

    private Map<Object, Object> map = new HashMap<Object, Object>();

    public void putObject(Object key, Object value) {
        map.put(key, value);
    }

    public Object getObject(Object key) {
        return map.get(key);
    }

    public Object removeObject(Object key) {
        return map.remove(key);
    }

    public void clear() {
        map.clear();
    }

    public int size() {
        return map.size();
    }

    @Override
    public String toString() {
        return "Perpetual
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值