• JavaScript设计模式中的享元模式


    享元模式

    可以解决大量对象带来的性能问题,为解决性能问题而生的设计模式,通过时间换空间的优化模式
    享元模式要求将对象的属性划分为内部状态和外部状态(状态在通常为属性),享元模式的目标是尽量减少共享对象的数量。

    如何划分内部状态和外部状态

    把所有的内部状态相同的对象都指定为同一个共享的对象,而外部状态可以从对象身上剥离出来,并存储于外部。

    内部状态

    1. 存储于对象内部
    2. 被一些对象共享
    3. 独立于具体的场景,通常不会变

    外部状态

    1. 取决于具体的场景,并根据场景而变化,外部状态不能被共享

    使用方法

    1. 剥离了外部状态对象成为共享对象,外部状态在必要时被传入共享对象来组装成一个完整的对象。虽然组装对象需要耗费一些时间,但是可以大大减少系统中的对象数量。

    2. 在下面例子中,性别是内部状态,内衣是外部状态,通过区分这两种状态,大大减少系统中的对象数量。通常来讲,内部状态有多少种组合,系统中便最多存在多少个对象。

    3. 使用享元模式关键是区分内部状态和外部状态,可以被对象共享的属性是内部状态,不可以被共享的是外部状态,不管什么衣服都可以按照性别来区别不同。外部状态取决于具体的场景,并根据场景而变化,就像例子中每件衣服都是不同的,他们不能被对象共享,因此只能被划分为外部状态。

      /**
       *
       * 每次只需要传一个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();
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      1. 注意:

        1. 我们通过构造函数显示 new 出了男女两个 model 对象,在其他系统中,也许并不是一开始就需要所有的共享对象
        2. 给 model 对象手动设置了 undewear 外部状态,在更复杂的系统中,这不是一个最好的方式,因为外部状态可能会相当复杂,他们与共享对象的联系会变得困难
      2. 解决:

        1. 通过工厂来解决第一个问题,只有当某种共享对象被真正需要时,它才从工厂中创建出来。
        2. 第二个问题,可以用一个管理器来记录对象相关的外部状态,使这些外部状态通过某个钩子和共享对象联系起来。
  • 相关阅读:
    van-popup滑动卡顿并且在有时候在ios上经常性滑动卡顿的情况
    服务器没网 利用本地机器反向隧道 设置conda代理配置环境
    连锁店如何通过连锁收银系统做会员营销
    Shell脚本之linux服务器服务进程监控
    超宽带脉冲定位方案,UWB精准定位技术,无线室内定位应用
    3年功能测试,面试要求18k,实在没法给,还不如给低点去招应届生
    Mac上LLAMA2大语言模型安装到使用
    JAVA浅谈Pair抽象类
    美团面试——餐饮系统开发
    NLP 学习之:2022.10.27 阶段性文章总结和筛选
  • 原文地址:https://blog.csdn.net/weixin_43405946/article/details/127914772