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方法注入自定義實作,好處是脫離了容器,更加靈活。