构建一个属于某个对象的对象池,方便对对象对复用,节约资源。
/**
* 对象池
*
* 管理对象
*/
export class ObjectPool<T>{
/**
* 对象的池子
*/
private listArrObjs: T[];
private className: string;
/**
* 构造时候传入类名方便构造对象
*/
constructor(className_: string) {
this.className = className_;
this.init();
}
private init(): void {
this.listArrObjs = [];
}
/**
* 静态 获取一个对象池
* 需要给出明确的类型,目前使用范型代替
*/
public static getPool<T>(className: string): ObjectPool<T> {
return new ObjectPool<T>(className);
}
/**
* 获取一个对象
*/
public getOneObj(): T {
if (this.listArrObjs.length > 0) {
return this.listArrObjs.shift();
}
let clazz: any = egret.getDefinitionByName(this.className);
// 这里可以直接创建出来如果传入的是构造类,否则可以用代理的方式来构建
this.listArrObjs.push(new clazz());
return this.listArrObjs.shift();
}
/**
* 回收一个对象
*/
public recoveryObj(obj: T): void {
this.listArrObjs.push(obj);
}
/**
* 释放对象池
*/
public destory(): void {
for (let i = 0, len = this.listArrObjs.length; i < len; i++) {
try {
let obj: any = this.listArrObjs[i];
obj.destory();//这里对对象需要有销毁的方法,方便释放
} catch (e) {
break;
}
}
this.listArrObjs = null;
}
}
说明:这是第一个测试的内容,还有很多需要修改,希望指正。
我们建立了一个讨论游戏及其软件技术的群(qq群:424671789),让我们共同为it事业奋斗