本节课将主要围绕前端开发日常实践中软件工程的设计模式及在前端的应用展开,通过对设计模式定义解读,讲解设计模式的发展背景、分类,并且带来浏览器中的单例和发布订阅这两个主要设计模式。
含义:软件设计中常见问题的解决方案模型
历史经验总结;
与特定语言无关;
发展背景:
01:模式语言:城镇、建筑、建造;
02:设计模式:可复用面向对象软件技术;
设计模式的趋势:
国内趋于平缓,国外不同;
设计模式分类:
创建型:如何创建一个对象;
结构型:如何灵巧地将对象组装成为较大的结构;
行为型:负责对象间的高效通信和职责划分;
浏览器中的设计模式:
单列模式:全局唯一方位对象;
应用场景:缓存,全局状态管理等
发布订阅模式:一种订阅机制,可在被订阅对象发生变化时通知订阅者
应用场景:从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,上线订阅等,应用广泛。
JavaScript中的设计模式
本节课将围绕 JavaScript 和其他前端框架中的设计模式展开,其中,将重点讲解 JavaScript 中的原型模式、代理模式、迭代器模式,在前端框架中设计模式介绍上,则是围绕代理模式和组合模式展开。
原型模式、代理模式、迭代器模式
原型模式:
定义:复制已有对象来创建新的对象;
应用场景:JS中对象创建的基本模式;
使用原型模式创建线上订阅中的用户;
代理模式:
定义:可以自定义控制队员对象的访问方式,并且允许在更新前后做一些额外处理;
应用场景:监控,代理工具,前端框架实现等;
使用代理模式实现用户状态订阅;
一个方法只做一件事;
迭代器模式:
定义:在不暴露数据类型的情况下访问集合中的数据;
应用场景:数据结构中有多种数据类型,列表,树等,提供通用操作接口;
用for of迭代所有组件;
前端框架中的设计模式:
代理模式,组合模式;
Vue 组件实现计数器;
前端框架中对DOM操作的代理:
更改属性—视图更新;
更新DOM属性—更新虚拟DOM—Diff—视图更新;
组合模式:
定义:多个对象组合使用,也可以单个对象独立使用;
应用场景:DOM,前端组件,文件目录,部门;
React 的组件结构;
总结:
设计模式不是银弹
总结出抽象模式相对比较简单,但想要将抽象的模式应用到场景中却很困难;
现代编程语言的多编程范式带来更多的可能性;
真正优秀的开源项目学习设计模式并不断实践。