前端设计模式应用 | 青训营

549 阅读5分钟

前端设计模式应用

设计模式是软件设计中常见问题的解决方案的模型,它是历史经验的总结,与特定语言无关。

设计模式(Design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。 (节选自百度百科)

设计模式的类型

总共有 23 种设计模式,可分为三大类。

创建型模式 - 如何创建一个对象

  • 工厂模式
  • 抽象工厂模式
  • 单例模式
  • 建造者模式
  • 原型模式

结构型模式 - 如何灵活的将对象组装成较大的结构

  • 适配器模式
  • 桥接模式
  • 过滤器模式
  • 组合模式
  • 装饰器模式
  • 外观模式
  • 享元模式
  • 代理模式

行为型模式 - 复责对象间的高效通信和职责划分

  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 空对象模式
  • 策略模式
  • 模板模式
  • 访问者模式

浏览器中的设计模式

单例模式

定义:全局唯一访问对象

  • 应用场景:缓存,全局状态管理。如定义命名空间和实现分支型方法、设计登录框,以及vuex 和 redux中的store等。
  • 优点
    • 划分命名空间,减少全局变量
    • 增强模块性,把自己的代码组织在一个全局变量名下,放在单一位置,便于维护
    • 且只会实例化一次。简化了代码的调试和维护
  • 缺点
    • 由于单例模式提供的是一种单点访问,所以它有可能导致模块间的强耦合从而不利于单元测试。
    • 无法单独测试一个调用了来自单例的方法的类,而只能把它与那个单例作为一 个单元一起测试。

发布订阅模式

定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者。

  • 应用场景:从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,上线订阅等等,应用广泛。

  • 发布订阅模式中,有三种主体:

    • publisher(发布者)
    • subscriber(订阅者)
    • broker / topic
  • 此外,虽然有些文章称发布订阅模式就是观察者模式,但实际上两者并非同一个设计模式。具体可参考《【JS设计模式】观察者模式VS发布订阅模式》

JavaScript中的设计模式

原型模式

定义: 原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象。 即,复制已有对象来创建新的对象。

  • 应用场景:JS中对象创建的基本模式。

代理模式

定义:可自定义控制对原对象的访问方式,并且允许在更新前后做一些额外处理。

  • 应用场景:监控,代理工具,前端框架实现等等。

迭代器模式

定义:在不暴露数据类型的情况下访问集合中的数据。

  • 应用场景:数据结构中有多种数据类型,列表,树等,提供通用操作接口。
  • 优势:
    • 提供一致的遍历各种数据结构的方式,而不用了解数据的内部结构
    • 提供遍历容器(集合)的能力而无需改变容器的接口

前端框架中的设计模式

代理模式

定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。

在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理者的作用是对我们的请求预先进行处理转接给实际对象

  • 应用场景:对 DOM 进行操作等。

组合模式

组合模式(Composite Pattern) 使得用户对单个对象组合对象的使用具有一致性 ,又称为部分-整体模式

将对象组合成树形结构,以表示“整体-部分”的层次结构。

可多个对象组合使用,也可单个对象独立使用。

  • 应用场景
    • 需要表示对象-整体层次结构
    • 希望用户忽略组合对象和单个对象的不同,用户将统一地使用组合结构中的所有对象(方法)。
    • 如:DOM,前端组件,文件目录,部门。

总结

以上便是我结合《前端设计模式应用》这门课程的框架,以及自己的查询、认识与理解,简要汇总而成的一些前端设计模式的知识点。

希望对各位有所帮助!

参考资料

《前端渣渣唠嗑一下前端中的设计模式(真实场景例子)》

《9种前端常见的设计模式》