白筱汐

想都是问题,做都是答案

0%

JavaScript设计模式——享元模式

介绍

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 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')