前端框架中的设计模式 | 青训营

106 阅读5分钟

浏览器中的设计模式

  • 单例模式

定义:全局唯一访问对象

  • 发布订阅模式

定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者 应用:从系统架构之间的解耦,到业务中一些实现模式。如邮件订阅,上线订阅等,应用广泛

JS中的设计模式

原型模式

  • 定义:赋值已有对象创建新的对象
  • 应用场景:JS中对象创建的基本模式

image (2).png image (3).png

代理模式

  • 定义:可自定义控制对象的访问方式,并允许在更新前后做一些额外的处理
  • 应用场景:监控,代理工具

迭代器模式

  • 定义:不暴露数据类型的情况下访问集中的数据
  • 应用场景:数据结构中多种数据结构 列表,树,提供通用操作接口

前端框架中的设计模式

  • 代理模式
  • image.png
  • 组合模式

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

在现代前端开发中,设计模式是一种被广泛应用的概念,它们为开发人员提供了一种有组织的方法来解决常见的问题和挑战。设计模式可以帮助我们构建可维护、可扩展且具有良好结构的应用程序。在本文中,我们将探讨前端框架中常见的设计模式,比较它们的优缺点,并通过具体的使用案例加深理解。

1. MVC(Model-View-Controller)模式

MVC是一种将应用程序分为三个主要组件的设计模式:模型(Model)、视图(View)和控制器(Controller)。它可以有效地将应用程序的数据、界面和控制逻辑分离开来,使得修改和维护变得更加容易。

优点:

  • 分离关注点(Separation of Concerns) :MVC模式将应用程序的不同方面分开,使得代码更易于维护和测试。
  • 可复用性:由于模型、视图和控制器是独立的组件,可以更容易地对它们进行重用。
  • 团队协作:不同的团队成员可以专注于不同的组件,从而提高开发效率。

缺点:

  • 复杂性:在较小的应用中,引入MVC模式可能会增加一些不必要的复杂性。
  • 学习曲线:对于新手开发者来说,理解和正确实现MVC模式可能需要一些时间。

使用案例:

假设我们正在开发一个任务管理应用。模型负责管理任务数据,视图负责呈现任务列表和详情,控制器负责处理用户交互并更新模型和视图。当用户点击标记任务完成时,控制器会更新模型中的数据,然后视图会相应地更新以反映这些更改。

2. 观察者(Observer)模式

观察者模式是一种对象间的一对多依赖关系,当一个对象(主题)的状态发生变化时,其所有依赖对象(观察者)都会得到通知并自动更新。

优点:

  • 松耦合:主题和观察者之间的耦合度很低,使得它们可以独立演化。
  • 动态性:可以在运行时添加或删除观察者,而不影响主题或其他观察者。
  • 可维护性:当需要在主题状态改变时执行特定的操作时,使用观察者模式可以更好地组织代码。

缺点:

  • 过多的更新:如果主题频繁地改变状态,可能会导致观察者频繁更新,增加性能开销。
  • 可能引发循环依赖:主题和观察者之间的循环引用可能会导致问题。

使用案例:

考虑一个在线聊天应用,多个用户可以加入不同的聊天室。每当一个用户发送消息时,所有在同一聊天室的用户都应该收到新消息的通知。在这种情况下,每个用户可以被视为一个观察者,而聊天室是主题。

3. 单向数据流(One-Way Data Flow)模式

单向数据流模式强调数据在应用程序中的单向流动,这意味着数据从一个源头流向更深层次的组件,但不会反向流回。这种模式通常用于构建可预测性高、易于调试的应用。

优点:

  • 可预测性:由于数据的单向流动,状态变化变得更加可预测,易于追踪。
  • 可调试性:在出现问题时,可以更容易地定位到特定的状态变化点。
  • 性能优化:由于数据流的限制,可以更容易地实现性能优化,避免不必要的更新。

缺点:

  • 繁琐:对于一些简单的场景,单向数据流可能会增加开发的复杂性。
  • 涉及大量的状态提升:为了保持单向数据流,可能需要将某些状态提升到更高层级的组件中,导致冗余代码。

使用案例:

想象一个待办事项列表应用。每个待办事项都有一个状态,可以标记为已完成或未完成。在单向数据流模式下,应用的状态存储在顶层组件中,并通过props向子组件传递。当用户标记某个待办事项为已完成时,顶层组件的状态会更新,然后数据会通过props流向每个待办事项子组件,从而使界面反映最新状态。

总结

设计模式在前端开发中起着至关重要的作用,它们可以帮助我们构建结构良好、易于维护的应用程序。不同的设计模式适用于不同的场景,开发人员需要根据实际需求来选择合适的模式。无论是MVC模式的分离关注点,还是观察者模式的动态性,亦或是单向数据流模式的可预测性,都可以在实际项目