Androidでインスタンスプールを実装する

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

インスタンストプールを実装しインスタンスを再利用します。
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();
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)