复用 TS 通用对象池

类型约束: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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值