package com.lfk.justweengine.engine; import java.util.ArrayList; import java.util.List; /** * 对象回收池 * 和自动的对象回收池可以选择使用 * * @author liufengkai * Created by liufengkai on 16/1/17. */ public class ObjectPool<T> { public String poolName = null; public ObjectPool(publicObjectFactory<T> factory, int maxSize) { this.freeObjects = new ArrayList<>(maxSize); this.factory = factory; this.maxSize = maxSize; } public interface publicObjectFactory<T> { T createObject(); } protected final List<T> freeObjects; protected final publicObjectFactory<T> factory; private final int maxSize; /** * 新建对象 * * @return object */ public T newObject() { T object; 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 T remove() { return freeObjects.remove(freeObjects.size() - 1); } public int size() { return freeObjects.size(); } /** * 完全释放 */ public void clear() { freeObjects.clear(); } public static <T> ObjectPool<T> newInstance(Class<T> clazz, publicObjectFactory<T> factory, int maxSize) { ObjectPool<T> pool; pool = new ObjectPool<>(factory, maxSize); pool.poolName = clazz.getName(); return pool; } }