前端设计模式| 青训营

75 阅读5分钟

什么是设计模式

软件设计中常见问题的解决方案模型,就是设计模式

为什么要学习设计模式

  • 代码结构清晰: 设计模式提供了一种组织代码的方式,使其更加清晰、易于理解和维护。通过使用适当的设计模式,你可以将代码分离成各个独立的组件,每个组件负责特定的功能,从而使整个代码库更有条理。
  • 可维护性和可扩展性: 设计模式鼓励使用一些经过验证的方法和结构,这些方法在项目的后续阶段能够更轻松地进行维护和扩展。使用设计模式可以降低代码变更对其他部分的影响,减少引入 bug 的风险。
  • 复用性: 设计模式鼓励代码的模块化和重用。通过将常见的解决方案抽象成模式,你可以在不同的项目中使用相同的模式,从而避免重复编写相似的代码。
  • 团队协作: 当多人共同开发一个项目时,采用共同的设计模式可以使代码更具一致性,降低沟通成本。团队成员可以更轻松地理解代码,因为他们都熟悉设计模式的概念。
  • 解决常见问题: 前端开发中有许多常见的问题,如数据同步、异步处理、状态管理等。设计模式提供了一些经过验证的解决方案,可以帮助你更快地解决这些问题。
  • 提升编程思维: 学习设计模式能够培养抽象思维、模式识别和问题分解能力。这些能力不仅对前端开发有益,也对其他领域的编程工作有帮助。
  • 跨框架和跨语言: 很多设计模式是通用的,不仅适用于前端开发,也适用于其他领域和编程语言。通过学习设计模式,你能够更好地理解和应用各种编程环境。

接下来来就给大家介绍一下23 种设计模式

23种设计模式

  • 创建型:(如何创建一个对象)

    • 抽象工厂、工厂、单例、建造者、原型
  • 结构型:(如何灵活的将对象组装成较大的结构)

    • 桥接、代理、装饰器、适配器、享元、组合、门面(外观)
  • 行为型:(负责对象间的高效通信个职责划分)

    • 观察者、模板、迭代、状态、命令、中介者、解释器、职责链、访问者、策略、备忘录

浏览器中的设计模式

  • 单例模式
  • 发布订阅者模式

单例模式

定义

全局唯一访问对象

应用场景

缓存,全局状态管理等。

例子:用单例模式实现请求缓存

image.png

image.png

image.png

image.png

发布订阅者模式

定义

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

应用场景

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

例子:用发布订阅者模式实现用户上线订阅

image.png

image.png

JavaScript中的设计模式

  • 原型模式
  • 代理模式
  • 迭代器模式

原型模式

定义

复制已有对象来创建新的对象

应用场景

Js中对象创建的基本模式

例子:用原型模式创建上线订阅中的用户

image.png

image.png

代理模式

定义

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

应用场景

监控,代理工具,前端框架实现等等

例子:使用代理模式实现用户状态订阅

image.png

image.png

迭代器模式

定义

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

应用场景

数据结构中有多种数据类型,列表,树等,提供通用操作接口

例子:用for of迭代所有组件

image.png

image.png

image.png

前端中的设计模式

  • 代理模式
  • 组合模式

代理模式

定义

应用场景

给原类添加非功能性需求,为了将代码与原业务解耦。

业务系统的非功能性需求开发:监控、统计、鉴权、限流、日志、缓存。

例子:通过接口实现

image.png

组合模式

定义

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

应用场景

DOM,前端瑞组件,文件目录,部门

例子:React的组件结构

image.png

image.png

总结

学习了前端设计模式后,我深刻认识到在开发复杂的前端应用时,合理运用设计模式可以提高代码的可维护性、扩展性和重用性。设计模式是经过实践验证的通用解决方案,可以帮助开发者更好地组织代码,减少重复劳动,并降低出现错误的风险。
首先,我学习了各种常见的前端设计模式,如单例模式、工厂模式、观察者模式等。了解这些模式的原理和应用场景后,我可以在不同的情况下选择合适的设计模式来解决问题。例如,单例模式可以确保一个类只有一个实例,工厂模式可以根据不同的需求创建不同的对象,观察者模式可以实现对象之间的松耦合通信。
其次,通过学习设计模式,我掌握了更优雅、可读性更高的代码组织方式。设计模式提供了一种结构化的方法来组织代码,使得不同部分之间的关系更加清晰。这有助于团队协作,降低项目维护的难度,并促使我写出更加健壮的代码。
另外,我学会了如何将设计模式应用于前端框架和库中。很多前端框架和库已经内置了一些设计模式,通过学习它们的源码,我可以更好地理解这些工具是如何利用设计模式来解决实际问题的。这有助于我更好地使用这些工具,同时也为我在项目中自己实现设计模式提供了借鉴。