这是我参与「第四届青训营 」笔记创作活动的第2天
以下是我在参加此次青训营课程学习中的一些思考及总结。
设计模式简介
设计模式(Design pattern)代表了最佳实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是软件设计中常见问题的解决方案的模型,它是历史经验的总结,与特定语言无关。
设计模式分类
根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 中所提到的,总共有 23 种设计模式,可分为三大类。
创建型模式 - 如何创建一个对象
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
结构型模式 - 如何灵活的将对象组装成较大的结构
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
行为型模式 - 复责对象间的高效通信和职责划分
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
浏览器中的设计模式
单例模式
定义:全局唯一访问对象。
应用场景:缓存,全局状态管理等。
发布订阅模式
定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者。
应用场景:从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,上线订阅等等,应用广泛。
const button = document.getElementById("button")
const doSomething1 = () => {
console.log("Send message to user")
}
const doSomething2 = () => {
console.log("Log...")
}
button.addEventListener("click", doSomething1)
button.addEventListener("click", doSomething2)
JavaScript中的设计模式
原型模式
定义:复制已有对象来创建新的对象。
应用场景:JS中对象创建的基本模式。
代理模式
定义:可自定义控制对原对象的访问方式,并且允许在更新前后做一些额外处理。
应用场景:监控,代理工具,前端框架实现等等。
迭代器模式
定义:在不暴露数据类型的情况下访问集合中的数据。
应用场景:数据结构中有多种数据类型,列表,树等,提供通用操作接口。
前端框架中的设计模式
代理模式
定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。
应用场景:对 DOM 进行操作等。
前端框架中对 DOM 操作的代理:
虚拟 DOM(Virtual DOM)本质上是 JS 和 DOM 之间的一个映射缓存,它在形态上表现为一个能够描述 DOM 结构及其属性信息的 JS 对象。
- 虚拟 DOM 是 JS 对象
- 虚拟 DOM 是对真实 DOM 的描述
我们看看 React 中的虚拟 DOM 大致是如何工作的:
- 挂载阶段:React 将结合 JSX 的描述,构建出虚拟 DOM 树,然后通过
ReactDOM.render实现虚拟 DOM 到真实 DOM 的映射(触发渲染流水线)。- 更新阶段:页面的变化在作用于真实 DOM 之前,会先作用于虚拟 DOM,虚拟 DOM 将在 JS 层借助算法先对比出具体有哪些真实 DOM 需要被改变,然后再将这些改变作用于真实 DOM。
组合模式
定义:可多个对象组合使用,也可单个对象独立使用。
应用场景:DOM,前端组件,文件目录,部门。
最后
以上就是我在此次青训营课程 《前端设计模式应用》 中的一些思考和总结。