<script>
var Model = function( sex ){
this.sex = sex;
};
Model.prototype.takePhone = function(){
console.log( "sex = " + this.sex + " " + "underwear = " + this.underwear );
};
//分别创建一个男模特和一个女模特
var maleModel = new Model( "male" );
var femaleModel = new Model( "female" );
//给男模特依次穿上所有的男装,并进行拍照
for( var i = 0; i < 50; ){
maleModel.underwear = ++i;
maleModel.takePhone();
}
//同样,给女模特穿上所有的女装,并进行拍照
for( var i = 0; i < 50; ){
femaleModel.underwear = ++i;
femaleModel.takePhone();
}
//可以看到,改进之后的代码,只需要两个对象便完成了同样的功能
</script>
<h1>内部状态与外部状态</h1>
<p>以上的例子便是享元模式的雏形,享元模式要求将对象的属性划分为内部状态与外部状态。</p>
<p>享元模式的目标是尽量减少共享对象的数量,关于如何划分内部状态和外部状态,下面的几条经验提供了一些指引。</p>
<p>1.内部状态存储于对象内部;2.内部状态可以被一些对象共享;3. 内部状态独立于具体的场景,通常不会改变;4.外部场景取决于具体的具体的场景,并且根据场景而变化,外部状态不能被共享。</p>