1、我们需要一个缓存接口
public interface CacheService {
Object get(String key);
void set(String key, Object value);
void delete(String key);
void setCacheService(CacheService cacheService);
}
2、实现这个接口
public class CacheServuceImpl implements CacheService {
/**
* 使用匿名类做为缓存接口的实现
* 这种写法将缓存的实现封装了起来
*/
private CacheService cacheService = new CacheService() {
// 默认使用HashMap做为缓存
private Map<Object, Object> cacheMap = new HashMap<>();
@Override
public Object get(String key) {
return cacheMap.get(key);
}
@Override
public void set(String key, Object value) {
cacheMap.put(key, value);
}
@Override
public void delete(String key) {
cacheMap.remove(key);
}
@Override
public void setCacheService(CacheService cacheService) {
throw new UnsupportedOperationException();
}
};
@Override
public void setCacheService(CacheService cacheService) {
this.cacheService = cacheService;
}
@Override
public Object get(String key) {
Object value = cacheService.get(key);
System.out.println("获取缓存" + value);
return value;
}
@Override
public void set(String key, Object value) {
System.out.println("设置缓存" + value);
cacheService.set(key, value);
}
@Override
public void delete(String key) {
System.out.println("删除缓存" + key);
cacheService.delete(key);
}
}
3、打印一下
public class Client {
public static void main(String[] args) {
CacheService service = new CacheServuceImpl();
service.set("a", "窗前明月光");
service.get("a");
service.delete("a");
service.get("a");
// 通过set方法可以将我们自动以的缓存实现注入进去
service.setCacheService(new CacheService() {
@Override
public Object get(String key) {
return null;
}
@Override
public void set(String key, Object value) { }
@Override
public void delete(String key) { }
@Override
public void setCacheService(CacheService cacheService) { }
});
}
}
我们使用匿名类做为默认实现,使用set方法注入自定义实现,好处是脱离了容器,更加灵活。