package com.qubling.sidekick.model; import java.util.HashMap; import java.util.Map; import com.qubling.sidekick.instance.Instance; import com.qubling.sidekick.search.Schema; public abstract class Model<SomeInstance extends Instance<SomeInstance>> { private final Schema schema; private Map<String, SomeInstance> objectCache; public Model(Schema schema) { this.schema = schema; this.objectCache = new HashMap<String, SomeInstance>(); } public Schema getSchema() { return schema; } public void cache(SomeInstance instance) { objectCache.put(instance.getKey(), instance); } protected abstract SomeInstance constructInstance(String key); public SomeInstance acquireInstance(String key) { SomeInstance instance = objectCache.get(key); // Log.d("Model", "objectCache contains " + objectCache.size()); if (instance == null) { // Log.d("Model", "objectCache miss " + key); instance = constructInstance(key); objectCache.put(key, instance); } // else { // Log.d("Model", "objectCache hit " + key); // } return instance; } }