这是我参与「第四届青训营 」笔记创作活动的的第3天。本篇笔记是对 前端设计模式应用 课程的内容总结,并结合了自己的一些理解,对内容进行了一定的梳理。有意见和建议也欢迎在评论区交流讨论呀~
知识点
- 设计模式介绍
- 设计模式在前端开发中的应用
什么是设计模式
设计模式是 软件设计中常见问题的解决方案模型,是在特定上下文下对于普遍出现问题的 可重用解决方案 ,是对软件设计历史经验的总结,与语言无关。
也就是说设计模式可以将软件的设计方式进行分类、概括,并能够总结归纳出这些不同设计方式的类型优缺点以及其适用范围。
局限性
设计模式的概念是由《设计模式:可复用面向对象软件的基础》在 1994 年所提出的。
- 适用层面局限:主要是面向对象程序设计,而现代前端开发主要使用函数式编程范式(例如 React 框架)
- 实用层面局限:仅仅概括了软件设计的模式,而具体实现中的细节仍需要设计;设计模式难以指导设计优秀软件(抽象到具体的过程),设计模式难以实现复用。
矛盾点:无经验的工程师在具体场景难以使用设计模式(将抽象具象化);有经验的工程师已经在过往经历中熟悉了这些设计模式的使用(已经熟悉了整个具象化过程,并可能总结了方法论)。
在全球对于设计模式的搜索热度在不断下降。
设计模式在前端开发中的应用
设计模式有缺点,但依然能够为我们提供一个对 软件设计方案 标准的总结。通用术语,方便工程师进行交流,不同具体设计之间对比学习。
单例模式
如果一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。
多用于缓存、全局状态管理,例如在浏览器中的全局唯一访问对象 window 。
发布订阅模式
基于一个事件(主题)通道,希望接收通知的对象
Subscriber通过自定义事件订阅主题,被激活事件的对象Publisher通过发布主题事件的方式通知各个订阅该主题的Subscriber对象。
是一种订阅机制,在被订阅对象变化时通知订阅者。例如为按钮添加的点击事件,这个事件就是订阅者。
原型模式
复制已有对象创建新的对象,例如 JS 中创建对象。
代理模式
自定义控制对原对象的访问方式,例如监控代理工具、前端框架的虚拟 DOM 实现对真实 DOM 的代理操作。
迭代器模式
在不暴露数据类型的情况些访问集合数据,例如 for...of 遍历对象、数组等。
组合模式
多个对象组合使用,也可单个对象独立使用,例如 DOM 树形结构、前端组件、文件目录。
组合模式实现文件夹
使用组合模式,实现了一个包含文件夹、文件的文件系统,能够简单的实现文件大小记录、添加文件层级等功能。