JavaScript设计模式——享元模式

70 阅读1分钟

介绍

享元模式运用共享技术来有效地支持大量细粒度的复用,以减少创建的对象的数量。

享元模式可以简单的理解为:单例模式 + 工厂模式 + 管理器, 管理器对外部状态进行管理组合成完整的对象。

传统的享元模式是将目标对象的状态区分为内部状态和外部状态, 内部状态相同的对象可以被共享出来指向同一个内部状态。

// 1、享元工厂
// 负责创建并管理享元,实现共享逻辑(创建时判断是否存在,已存在就返回现有对象,否则创建一个)
class FlyWeightFactory {
  constructor() {
    this.flyweights = {}; // 数据共享(资源池)
  }
  getFlyweight(key) {
    if (!this.flyweights[key]) {
      this.flyweights[key] = new ConcreteFlyweight();
    }
    return this.flyweights[key];
  }
}

// 2、抽象享元对象
// 内部状态,拥有相似的属性
class Flyweight {
  isUsed = false;
  operation() {}
}

// 3、具体享元对象,传入外部状态,实现享元对象抽象接口
class ConcreteFlyweight extends Flyweight {
  operation(extrinsicState) {
    console.log(`具体享元对象操作,外部状态:${extrinsicState}`);
  }
}

// 4.客户端使用
// 调用享元工厂获取具体的享元对象,并设置外部状态
const factory = new FlyWeightFactory()

const flyweightA = factory.getFlyweight('A')
flyweightA.operation('A')
const flyweightB = factory.getFlyweight('B')
flyweightB.operation('B')