林秀栋的技术博客

设计模式(二十九) 享元模式

享元模式是一种用于性能优化的模式,如果系统中因为创建了大量类似的对象而导致内存不足或占用过高这种模式就非常有用了。

//假设有个内衣工厂,目前的产品有50种男士内衣与50种女士内衣,为了推销产品,工厂决定生产一些塑料模特来穿上它们的内衣拍成内衣广告。
//正常情况需要50个男模特与50个女模特,然后让他们每人分别穿上一套内衣来拍照。不使用享元模式可能会有这种方式来写:
var Model = function (sex,underwear) {
	this.sex = sex;
	this.underwear = underwear;
}
Model.prototype.takePhoto = function () {
	console.log('sex=' + this.sex + 'underwear=' + this.underwear )
}
for (var i = 1; i <=50; i++){
	var maleModel = new Model('male','underwear' + i)
	maleModel.takePhoto();
}
for (var i = 1; i <=50; i++){
	var maleModel = new Model('female','underwear' + i)
	femaleModel.takePhoto();
}
//如你所见产生了100个对象,如果生产了10000种内衣,那么会...

//下面我们来考虑如何优化这个场景,其实男模特与女模特各有一个就行了然后分别穿上不同的内衣来拍照。
var Model = function (sex) {
	this.sex = sex;
}
Model.prototype.takePhoto = function () {
	console.log('sex=' + this.sex + 'underwear=' + this.underwear )
}

var maleModel = new Model('male'),
female = new Model('female');
for (var i = 1; i <=50; i++){
	maleModel.underwear = 'underwear' + i;
	maleModel.takePhoto();
}
for (var i = 1; i <=50; i++){
	female.underwear = 'underwear' + i;
	femaleModel.takePhoto();
}
//改进以后,只需要两个对象便完成了同样的功能。