package foundation.right; import java.util.HashMap; import java.util.Map; public class RangePool { private Range range; private Map dataMap; public RangePool(Range range) { dataMap = new HashMap(); } 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(); } }