JavaScript设计模式(七)享元模式

享元模式是一种用于性能优化的模式,核心是运用共享技术来有效支持大量细粒度的对象。

1.基本实现

/**
 * 假设现在有50个product1和50个product2需要录入编号
 */
let product1List = [];
let product2List = [];

let Product = function (name, number) {
  this.name = name;
  this.number = number;
}

for (let i = 0; i < 50; i++) {
  let product = new Product('product1', i);
  product1List.push(product);
}

for (let i = 0; i < 50; i++) {
  let product = new Product('product2', i);
  product2List.push(product);
}

console.log(product1List);
console.log(product2List);

如果将以上代码的条件改为需要录入100000个产品编号,那我们就需要创建出100000个对象,程序可能会直接崩溃。

/** * 考虑一下优化程序,通过观察代码,产品对象实际上只需要两个就够了,每次只需要改变对象的编号 */

let Product = function (name) { this.name = name; }

Product.prototype.setNumber = function(number) { this.number =
number; console.log(this); }

let product1 = new Product(‘product1’);

for (let i = 0; i < 50; i++) { product1.number = i;
product1.setNumber(i); }

let product2 = new Product(‘product2’);

for (let i = 0; i < 50; i++) { product2.number = i;
product2.setNumber(i); }

2.内部状态与外部状态

享元模式要求将对象的属性划分为内部状态与外部状态。享元模式的目标是尽量减少共享对象的数量。

关于如何划分内部、外部状态:
(1)内部状态存储于对象内部
(2)内部状态可以被一些对象共享
(3)内部状态独立于具体的场景,通常不会改变
(4)外部状态取决于具体的场景,并根据场景而变化,外部状态不能被共享。

3.享元模式的适用性

(1)一个程序中使用了大量的相似对象
(2)由于使用了大量对象,造成很大的内存开销
(3)对象的大多数状态都可以变为外部状态
(4)剥离出对象的外部状态之后,可以用相对较少的对象取代大量对象

4.享元模式的极端情况

(1)没有内部状态的享元
没有内部状态的享元实际上就是一个单例,但是因为其还是有剥离外部状态的过程,因此我们仍然将其称为享元
(2)没有外部状态的享元
没有外部状态的享元并不是一个纯粹的享元模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

volit_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值