8 前端设计模式概述| 青训营笔记

58 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

一、本堂课重点内容:

  1. 前端设计模式基本情况
    1. 设计模式定义
    2. 设计模式背景同步
    3. 设计模式发展趋势
    4. 设计模式分类
  1. 浏览器中的设计模式
    1. 单例模式
    2. 发布订阅模式

二、详细知识点介绍:

前端设计模式基本情况

设计模式定义

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

  • 设计模式是历史经验的总结,不是科学,所以要辩证对待
  • 设计模式是一种思想,与特定语言无关,不过总得来讲主要是针对面向对象语言的。

设计模式发展趋势

设计模式分类

最经典的有23种设计模式,分为三大类:

  • 创建型 - 如何创建一个对象
  • 结构型 - 如何灵活的将对象组装成较大的结构
  • 行为型-负责对象间的高效通信和职责划分

浏览器中的设计模式

单例模式

在《JavaScript设计模式与开发实践》 中对单例模式的定义为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式属于是比较常用的设计模式,其一个主要用途是避免重复的创建实例,节约不必要的开销。通常会在第三方库的开发中使用到,如果是项目的开发,单例模式也会用在一些数据缓存、全局通用弹窗(如登录弹窗)等一些场景中。

浏览器中很典型的就是window对象,任何地方对其操作都会引起全局变化。

发布订阅模式

基于一个事件(主题)通道,希望接收通知的对象 Subscriber 通过自定义事件订阅主题,被激活事件的对象 Publisher 通过发布主题事件的方式通知各个订阅该主题的 Subscriber 对象。

注意发布订阅模式和观察者模式有点像但是不完全相同。

三、实践练习例子:

实现一下请求缓存,请求缓存在一个页面中在不同时间不同地方会发送相同url,那么希望能复用第一次请求返回的结果,以此带来更好的用户体验。

import { api ] from"./utils"
const cache: Record<stringstring> = {}
export const request = async (url: string) = {
  if (cache[url]) {
    return cache[url];
  }
  
  const response = await api(url);
  
  cache[url] = response;
  return response;
}

测试一下

test("should response quickly second time",async 0) = {
await request("/user/1");
const startTime = Date .now():await request("/user/1");const endTime = Date .now();
const costTime = endTime - startTime:
expect(costTime).toBeLessThan(50);

四、课后个人总结:

  1. 理论指导实践,再实践验证创新理论

五、引用参考:

  1. juejin.cn/post/715098…
  2. juejin.cn/post/705544…