js里的享元模式与对象池

享元模式

享元模式

享元模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。

该模式在遇到会创建大量相似的对象的情况下很有用,它把多个相似对象的共同点封装起来,把不同点作为外部变量来传入,这样就可以节省空间。

享元模式有点像状态模式,但是状态模式把状态对象缓存进自己里面,享元模式是接收一个对象,再按照对象来执行。

像是这样,就不需要创建50个对象来执行它们的takephoto,只需要一个对象即可:

class Model {
    constructor(gender) {
        this.gender = gender;
    }
    takephoto() {
        console.log(`${this.gender}穿着${this.underwear}`);
    }
}

const model = new Model("model");

for (let i = 1; i < 51; i++) {
    model.underwear = `第${i}款衣服`;
    model.takephoto();
}

对象池

对象池也是用来节省对象实例化的一个方法。

对象池可以实例化多个对象,这些对象在不需要时会被回收进对象池,如果下次再次实例化,会优先返回对象池中的对象,如果对象池中没有对象再进行实例化。在实现上有点类似于单例模式:

const Pool = (function () {
    const pools = [];
    return class {
        constructor() {
            if (pools.length) {
                return pools.pop();
            }
        }
        recover() {
            pools.push(this);
        }
    };
})();

posted @ 2021-07-24 17:50  影依贤者  阅读(229)  评论(0)    收藏  举报