我希望汇集项目中的某些类。所以我不希望能够使用 new SomeClass() 来实例化这些类,而是使用 SomeClass.allocate() 从池中获取一个新项目。 对于需要池化的每个类,我都有这种代码。
public class GameObject
{
// Pooling: Provides a static method for allocation and a method for freeing
private static Pool<GameObject> pool = new Pool<GameObject>();
public static GameObject allocate() { return pool.obtain(); }
public void free() { pool.free(this); }
...
}
现在我可以通过将默认构造函数设为私有(private)来禁用正常的实例化方式,但问题是池需要在创建时实例化类,并且在池需要扩展时也需要实例化。
有什么方法可以限制只能在泳池边施工吗?
最佳答案
我可以看到您有 2 个选项:要么将其设为池的内部类,要么将 allocate
方法设为包私有(private)并将其与池放在同一个包中。
编辑:啊。只需将构造函数设为私有(private),然后覆盖 Pool
用于创建新实例的任何方法。作为使用上面框架的(粗略)示例:
public abstract class Pool<T>
{
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<GameObject> pool = new Pool<GameObject>(){
public GameObject getNewObject(){ return new GameObject(); }
};
public static GameObject allocate() { return pool.obtain(); }
private GameObject(){}
public void free() { pool.free(this); }
}
GameObject
的构造函数很高兴其他任何人都无法访问。
关于Java:只允许一个类实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129797/