类型约束:extends { Reset(): void } 表示:
T必须是一个包含Reset方法的对象类型
Reset方法必须是无参数且返回void
不需要显式接口声明(TypeScript的结构化类型系统特性)
class GameObjectPool<T extends { Reset(): void }> {
private _pool: T[] = []; // 对象存储池
constructor(private creator: () => T) {} // 注入对象创建逻辑
Get(): T {
// 优先使用池中对象,没有则创建新对象
return this._pool.pop() || this.creator();
}
Return(obj: T): void {
obj.Reset(); // 重置对象状态
this._pool.push(obj); // 回收到池中
}
}
// 使用示例:
class Bullet {
Reset() { /* 重置坐标等状态 */ }
}
// 初始化对象池
const bulletPool = new GameObjectPool(() => new Bullet());
// 获取子弹
const bullet = bulletPool.Get();
// 使用后回收
bulletPool.Return(bullet);