出版于

升级编码

设计模式:打字稿中的轻量级模式

拍摄者亚历山大·格雷Unplash

欢迎来到打字稿中的设计模式系列,使用Typescript引入Web开发中的一些有用的设计模式。

设计模式对Web开发人员非常重要,我们可以通过掌握它们来编写更好的代码。在本文中,我将使用打字稿介绍轻量级图案。

轻量级模式是运行共享技术,以有效地支持大量细粒对象,避免大量具有相同内容(例如内存消耗)的小型类的开销,并允许每个人共享一类。

Uphone Company是一家手机制造商,它可以大量生产的额外电话,手机的大多数数据(例如型号和屏幕)是相同的,数据的一小部分是不相同的。例如内存大小和序列号。

班级
构造函数(型号:字符串,屏幕:数字,
内存:数字,SN:数字){}
}
uphones = [];
for(让i = 0; i <10000; i ++){
让内存= i%2 == 0?64:128;
uphones.push(new Uphone(“ 8U”,5.0,内存,i));
}

在上面的代码中,创建了10,000个额外的对象,每个对象都独立地适用于内存。但是,如果我们仔细观察,我们可以看到大多数额定对象都是相似的,但是内存和序列号是不同的。如果是具有高性能要求的程序,我们必须考虑优化它。对于具有大量类似对象的场景,我们可以使用轻量级模式来优化它。

轻量级模式中​​有两个重要的概念:内部状态和外部状态。

  • 内部状态:飞行对象内的共享部分不会随着外部环境的变化而变化。
  • 外部状态:无法共享的状态是随着环境变化而变化的外部状态。

由于轻量级模式区分了内部状态和外部状态,因此我们可以通过设置不同的外部状态来使同一对象具有某些不同的特征,而内部状态则将其设置为同一部分

接下来,我们将介绍如何使用轻量级模式来解决先前的问题。为了更好地理解以下代码,让我们首先查看相应的UML图:

上面示例中的大多数额外电话都具有相同的模型,屏幕和内存,因此可以共享数据的这一部分,这是飞行型模型中的固有数据,因此我们定义了与Uphone相对应的flyweaight类以下内容:

班级uphonefly量{
构造函数(模型:字符串,屏幕:数字,内存:数字){}
}

内部状态(型号,屏幕,内存):飞行对象内的共享部分不会随着外部环境的变化而变化。

在里面重量级班级,有三个成员属性模型,,,,屏幕, 和记忆。除了轻量级课程外,我们还需要一家飞行厂来维护这些数据:

类flyweightFactory {
私有phonesmap:map = new Map();
公共获取(型号:字符串,屏幕:数字,内存:编号):
UphoneFlyWeight {
const键=模型 +屏幕 +内存;
如果(!this.phonesmap.has(key)){
this.phonesmap.set(键,new uphoneFlyWeight(型号,
屏幕,内存));
}
返回this.phonemap.get(key)!;
}
}

在里面飞行员上课,我们定义一个phonesmap对象保存轻量级对象,并提供一个得到根据模型,屏幕和内存参数获得飞行对象的方法。如果是phonesmap对象包含相应的重量级对象,它将直接返回。否则创建一个新的重量级对象并返回。

由于每个Uphone的序列号都是唯一的,因此该属性需要用作外部状态。基于重量级课程,让​​我们更新以前定义的口感班级:

班级
构造函数(轻量级:UphoneFlyWeight,sn:number){}
}

外部状态(SN):无法共享的状态是随着环境变化而变化的外部状态。

另外,为了更轻松地创建上透明的对象,我们继续定义一个诉讼班级:

班级frounhonefactory {
私人静态飞行量:flyWeightFactory =
新的flyweightFactory();
public getuphone(型号:字符串,屏幕:数字,
内存:数字,SN:数字){
const flyweight:uphonefly量=
uphonefactory.flyweightfactory.get(
型号,屏幕,内存
);
返回新的透气(flyweight,sn);
}
}

诉讼课堂,我们可以通过以下方式创建10,000个额定对象:

const uphoneFactory = new uphoneFactory();uphones = [];
for(让i = 0; i <10000; i ++){
让内存= i%2 == 0?64:128;
uphones.push(uphonefactory.getuphone(“ 8U”,5.0,内存,i));
}
console.log(
“重量级次数:”,,
uphonefactory.flyweightfactory.phonesmap.size
);

当您成功运行上述代码时,终端将输出以下结果:

重量轻量级计数:2

从上述结果中,尽管我们创建了10,000个蓬松的对象,但我们只创建了两个重量级对象。

班级uphonefly量{
构造函数(模型:字符串,屏幕:数字,内存:数字){}
}

最后,让我们总结一下轻量级模式的使用情况:

  • 一个程序使用大量类似对象,这些对象会导致较大的内存开销。
  • 对象的大多数状态可以变得外部,并且通过剥离对象的外部状态,可以用相对较少的共享对象替换大量对象。

完整的代码如下所示:

如果您有任何疑问,请随时给我留言。稍后我将继续介绍其他模式,如果您有兴趣,您可以关注我betway娱乐官网或者推特

获取中型应用betway娱乐官网

一个说“在应用商店上下载”的按钮,如果单击,它将带您到iOS App Store
一个说“获取它,Google Play”的按钮,如果单击它,它将带您到Google Play商店
Baidu