你可以看到两个选项:要么使它成为池的内部类,要么使allocate方法包为private,并将它放在与池相同的包中.
编辑:啊.只需将构造函数设为私有,然后覆盖池用于创建新实例的任何方法.作为使用上面框架的(粗略)示例:
public abstract class Pool
{
public abstract T getNewObject();
public T obtain(){ return getNewObject(); }
public void free(T obj) {}
}
和
public class GameObject
{
// Pooling: Provides a static method for allocation and a method for freeing
private static Pool pool = new Pool(){
public GameObject getNewObject(){ return new GameObject(); }
};
public static GameObject allocate() { return pool.obtain(); }
private GameObject(){}
public void free() { pool.free(this); }
}
游戏对象的构造函数很高兴其他任何人都无法访问.