package foundation.right;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
public class RangePool {
|
|
private Range range;
|
private Map<String, Object> dataMap;
|
|
public RangePool(Range range) {
|
dataMap = new HashMap<String, Object>();
|
}
|
|
public String apply(String key, RightAssistant assistant) {
|
synchronized (this) {
|
//1. 如果还没有申请过
|
if (!dataMap.containsKey(key)) {
|
Object data = assistant.createData(key);
|
dataMap.put(key, data);
|
assistant.setResult(data, true);
|
return key;
|
}
|
|
//2. 如果已经申请过了
|
Object data = dataMap.get(key);
|
if (assistant.isExpired(data)) {
|
// 如果已经过期,就允许申请
|
data = assistant.createData(key);
|
dataMap.put(key, data);
|
assistant.setResult(data, true);
|
return key;
|
}
|
|
//3. 已经申请,而且没有过期
|
assistant.setResult(data, false);
|
}
|
|
return key;
|
}
|
|
public void release(String key, RightAssistant assistant) {
|
|
}
|
|
@Override
|
public String toString() {
|
return range + " Pool " + dataMap.size();
|
}
|
|
}
|