Androidでインスタンスプールを実装する
インスタンストプールを実装しインスタンスを再利用します。
public class Pool<T> {
/**プールするオブジェクトのリスト*/
private final List<T> freeObjects;
/**プールするオブジェクトのファクトリ*/
private final PoolObjectFactory<T> factory;
/**プールオブジェクトのリストの最大数*/
private final int maxSize;
public Pool(PoolObjectFactory<T> factory, int maxSize) {
this.factory = factory;
this.maxSize = maxSize;
this.freeObjects = new ArrayList<>(maxSize);
}
/**
* プールからオブジェクトを払い出す
* @return
*/
public T newObject() {
T object = null;
if (freeObjects.size() == 0) {
object = factory.createObject();
} else {
object = freeObjects.remove(freeObjects.size() - 1);
}
return object;
}
/**
* プールにオブジェクトを返却する
* @param object
*/
public void free(T object) {
if (freeObjects.size() < maxSize) {
freeObjects.add(object);
}
}
public interface PoolObjectFactory<T> {
public T createObject();
}
}