JavaScript享元模式与开发实践(中)

104 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情

前言

作为一个前端切图仔,少有和各类设计模式打交道。但这不影响我们学习设计模式的思维,来提升我们的代码水平。

本章通过讲解享元模式,希望能够让你对设计模式更一步的学习。

本章学习内容👇

  • 内部状态与外部状态

内部状态与外部状态

享元模式有一个基本的要求:将共享对象的属性划分成内部状态外部状态

那么,什么是内部状态外部状态呢?

内部状态:顾名思义作为对象内部的固有属性,具体如下👇

  • 内部状态存储于对象内部
  • 内部状态用于对象间共享
  • 内部状态独立于具体的场景,以不改变作为原则

同样的,外部状态:作为对象外部的属性👇

  • 外部状态取决于具体使用时的场景,随着场景而进行变化
  • 外部状态不能够作为共享的属性

总的来说,我们将内部状态相同的对象都指定为一个共享的对象,而不是单独的依次创建。而它们在使用场景时所需要的“特殊”的属性,我们就通过外部状态来修改。

虽然,在每个使用场景时,我们都需要去改变共享对象的外部状态再使用。但我们可以不必再多次创建类似的对象,相比之下,这大大节约了我们的时间和内存。

了解完这俩个状态后,我们再回顾的上一章中我们讲的例子,

《 JavaScript享元模式与开发实践(上)》

其中, 我们创建了俩个共享对象

并且我们将性别作为这俩个共享对象的内部属性;在拍照也就是场景变化时,将内衣作为外部属性随着场景变化而变化。

通过这样的处理,我们大大减少了系统中对象数量。通常来讲,内部状态有几种情况,那么我们就需要创建多少个共享对象。而在这里性别只有俩种,所以我们只需要创建俩个共享对象

总结

使用享元模式的关键就在于,如何区分内部状态外部状态