可以解决大量对象带来的性能问题,为解决性能问题而生的设计模式,通过时间换空间的优化模式
享元模式要求将对象的属性划分为内部状态和外部状态(状态在通常为属性),享元模式的目标是尽量减少共享对象的数量。
把所有的内部状态相同的对象都指定为同一个共享的对象,而外部状态可以从对象身上剥离出来,并存储于外部。
剥离了外部状态对象成为共享对象,外部状态在必要时被传入共享对象来组装成一个完整的对象。虽然组装对象需要耗费一些时间,但是可以大大减少系统中的对象数量。
在下面例子中,性别是内部状态,内衣是外部状态,通过区分这两种状态,大大减少系统中的对象数量。通常来讲,内部状态有多少种组合,系统中便最多存在多少个对象。
使用享元模式关键是区分内部状态和外部状态,可以被对象共享的属性是内部状态,不可以被共享的是外部状态,不管什么衣服都可以按照性别来区别不同。外部状态取决于具体的场景,并根据场景而变化,就像例子中每件衣服都是不同的,他们不能被对象共享,因此只能被划分为外部状态。
/**
*
* 每次只需要传一个sex和underwaer参数
*
*/
const Model = function (sex) {
this.sex = sex;
};
Model.prototype.takePhoto = function () {
console.log("sex=", this.sex, "underwear=", this.underwear);
};
// 创建男女模特
const maleModel = new Model("male");
const femaleModel = new Model("female");
for (let i = 1; i <= 50; i++) {
maleModel.underwear = "underwear" + i;
maleModel.takePhoto();
}
for (let j = 1; j <= 50; j++) {
femaleModel.underwear = "underwear" + j;
femaleModel.takePhoto();
}
注意:
解决: