Skip to content

简单的对象池

javascript
const __ = {
  poolDic: Symbol("poolDic"),
};

/**
 * 简易的对象池实现
 * 用于对象的存贮和重复使用
 * 可以有效减少对象创建开销和避免频繁的垃圾回收
 * 提高游戏性能
 */

export default class Pool {
  constructor() {
    this[__.poolDic] = {};
  }

  /**
   * 根据对象标识符
   * 获取对应的对象池
   */

  getPoolBySign(name) {
    return this[__.poolDic][name] || (this[__.poolDic][name] = []);
  }

  /**
   * 根据传入的对象标识符,查询对象池
   * 对象池为空创建新的类,否则从对象池中取
   */

  getItemByClass(name, className) {
    let pool = this.getPoolBySign(name);
    let result = pool.length ? pool.shift() : new Object();
    return result;
  }

  /**
   * 将对象回收到对象池
   * 方便后续继续使用
   */

  recover(name, instance) {
    this.getPoolBySign(name).push(instance);
  }
}