前端设计模式

146 阅读3分钟
  • 什么是设计模式
    • 本质是将面向对象设计原则实际应用到软件开发中
    • 针对常见问题和需求的解决方案的可复用设计方案
    • 提供用于解决特定问题及需求的可复用解决方案
  • 设计模式的作用
    • 帮助开发人员在设计和编写代码时遵循一系列约定和原则
    • 提高代码的可重用性、可读性、可维护性和可扩展性,同时减少错误和降低风险。
  • 三大类型(共二十三种设计模式)
    • 创建型模式(五种)-如何创建一个对象
    • 结构型模式(七种)-如何灵活的将对象组装成较大的结构
    • 行为型模式(十一种)-负责对象间的高效通信和职责划分
  • 设计模式在前端中的实际应用
    • 浏览器中的设计模式

      • 单例模式
        • 定义:一个类只能被实例化一次,全局唯一访问对象
        • 应用场景:缓存、管理资源、配置对象或全局状态等,即适用于需要共享资源的场景。
        • 举例:

          class Singleton {
            constructor() {
              if (!Singleton.instance) {
                Singleton.instance = this;
              }
              return Singleton.instance;
            }
          }
          
          // 使用示例
          const instance1 = new Singleton();
          const instance2 = new Singleton();
          
          console.log(instance1 === instance2); // 输出true
          
          //上述代码中,创建了一个 Singleton 类,Singleton 类的构造函数定义为私有的,
            防止外部直接创建实例。构造函数内部通过检查Singleton.instance 的存在来决定
            是否创建新的实例,确保全局只有一个实例。
          
      • 发布订阅模式(观察者模式)
        • 定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者
        • 应用场景:从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,线上订阅等等那些需要实时更新用户界面的场景。
    • JS三大模型

      • 原型模式

        • 定义:复制已有对象来创建新的对象,而无需通过实例化类来创建新对象。
        • 应用场景:JS中对象创建的基本模式,适用在需要复制对象并且对象创建过程复杂、耗时或需要保护对象隐私信息的情况下。
        • 举例

           ```
           // 原型类
           class Prototype {
             constructor() {
               this.value = 0;
             }
          
             clone() {
               // 使用对象的浅拷贝来复制对象
               return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
             }
           }
          
           // 使用示例
           const prototype = new Prototype();
           prototype.value = 10;
          
           // 克隆原型对象
           const clone1 = prototype.clone();
           const clone2 = prototype.clone();
          
           console.log(clone1.value); // 输出:10
           console.log(clone2.value); // 输出:10
          
           //上述例子中,我们定义了一个原型类 Prototype,它包含属性 value,并定义了一个 
             clone() 方法,使用深拷贝来复制对象并返回新的对象。我们创建了一个原型对象 prototype,
             将其 value 设置为 10,并通过克隆原型对象得到了两个新的对象 clone1 和 clone2。
             最后,打印这两个克隆对象的 value 属性,发现它们与原型对象的值相同,都是 10
      • 代理模式

        • 定义: 可自定义控制对原对象的访问方式,并且允许在更新前后做一些额外处理
        • 应用场景: 监控,代理工具,前端框架实现等等,适合那些需要控制对某些敏感资源的访问的场景。
      • 迭代器模式

        • 定义:在不暴露数据类型的情况下访问集合中的数据
        • 应用场景:数据结构中有多种数据类型,列表,树等,提供通用操作接口
    • 前端框架中的设计模式

      • 代理模式
      • 组合模式
        • 定义:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。不同对象组合,关系用树型表示。
        • 应用场景:菜单和菜单项,组织机构等等需要处理树状结构、部分-整体关系、递归组合以及统一操作接口的场景。