实现思路
- 定义缓存接口:已有缓存系统具备基本读取和写入功能,定义一个接口
Cache
包含 get
和 put
方法。
- 实现具体缓存类:实现
Cache
接口的具体缓存类 SimpleCache
,包含实际的缓存逻辑。
- 定义装饰器抽象类:定义一个抽象装饰器类
CacheDecorator
实现 Cache
接口,并持有一个 Cache
实例的引用,通过构造函数初始化。该抽象类对接口方法进行默认实现,具体装饰器类继承它并按需重写方法。
- 实现时间戳记录装饰器:创建一个具体的装饰器类
TimestampLoggingCacheDecorator
继承自 CacheDecorator
。重写 get
方法,在调用原 get
方法获取数据后,记录当前时间戳。
关键代码示例
// 缓存接口
interface Cache {
Object get(String key);
void put(String key, Object value);
}
// 具体缓存类
class SimpleCache implements Cache {
private Map<String, Object> cache = new HashMap<>();
@Override
public Object get(String key) {
return cache.get(key);
}
@Override
public void put(String key, Object value) {
cache.put(key, value);
}
}
// 缓存装饰器抽象类
abstract class CacheDecorator implements Cache {
protected Cache cache;
public CacheDecorator(Cache cache) {
this.cache = cache;
}
@Override
public Object get(String key) {
return cache.get(key);
}
@Override
public void put(String key, Object value) {
cache.put(key, value);
}
}
// 时间戳记录装饰器
class TimestampLoggingCacheDecorator extends CacheDecorator {
public TimestampLoggingCacheDecorator(Cache cache) {
super(cache);
}
@Override
public Object get(String key) {
Object result = cache.get(key);
System.out.println("Read at: " + new Date());
return result;
}
}
使用示例
public class Main {
public static void main(String[] args) {
Cache simpleCache = new SimpleCache();
Cache timestampCache = new TimestampLoggingCacheDecorator(simpleCache);
timestampCache.put("key1", "value1");
Object value = timestampCache.get("key1");
}
}