前端设计模式应用
设计模式是软件设计中常见问题的解决方案的模型,它是历史经验的总结,与特定语言无关。
设计模式(Design pattern)是对面向对象设计中反复出现的问题的解决方案。这个术语是在1990年代由Erich Gamma等人从建筑设计领域引入到计算机科学中来的。设计模式通常描述了一组相互紧密作用的类与对象。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。 (节选自百度百科)
设计模式的类型
总共有 23 种设计模式,可分为三大类。
创建型模式 - 如何创建一个对象
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
结构型模式 - 如何灵活的将对象组装成较大的结构
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
行为型模式 - 复责对象间的高效通信和职责划分
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
浏览器中的设计模式
单例模式
定义:全局唯一访问对象
- 应用场景:缓存,全局状态管理。如定义命名空间和实现分支型方法、设计登录框,以及vuex 和 redux中的store等。
- 优点
- 划分命名空间,减少全局变量
- 增强模块性,把自己的代码组织在一个全局变量名下,放在单一位置,便于维护
- 且只会实例化一次。简化了代码的调试和维护
- 缺点
- 由于单例模式提供的是一种单点访问,所以它有可能导致模块间的强耦合从而不利于单元测试。
- 无法单独测试一个调用了来自单例的方法的类,而只能把它与那个单例作为一 个单元一起测试。
发布订阅模式
定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者。
-
应用场景:从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,上线订阅等等,应用广泛。
-
发布订阅模式中,有三种主体:
- publisher(发布者)
- subscriber(订阅者)
- broker / topic
-
此外,虽然有些文章称发布订阅模式就是观察者模式,但实际上两者并非同一个设计模式。具体可参考《【JS设计模式】观察者模式VS发布订阅模式》
JavaScript中的设计模式
原型模式
定义: 原型模式(prototype)是指用
原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象。 即,复制已有对象来创建新的对象。
- 应用场景:JS中对象创建的基本模式。
代理模式
定义:可自定义控制对原对象的访问方式,并且允许在更新前后做一些额外处理。
- 应用场景:监控,代理工具,前端框架实现等等。
迭代器模式
定义:在不暴露数据类型的情况下访问集合中的数据。
- 应用场景:数据结构中有多种数据类型,列表,树等,提供通用操作接口。
- 优势:
- 提供一致的遍历各种数据结构的方式,而不用了解数据的内部结构
- 提供遍历容器(集合)的能力而无需改变容器的接口
前端框架中的设计模式
代理模式
定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。
在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理者的作用是对我们的请求
预先进行处理或转接给实际对象
- 应用场景:对 DOM 进行操作等。
组合模式
组合模式(Composite Pattern) 使得用户对
单个对象和组合对象的使用具有一致性 ,又称为部分-整体模式。
将对象组合成树形结构,以表示“整体-部分”的层次结构。
可多个对象组合使用,也可单个对象独立使用。
- 应用场景:
- 需要表示对象-整体层次结构
- 希望用户忽略组合对象和单个对象的不同,用户将统一地使用组合结构中的所有对象(方法)。
- 如:DOM,前端组件,文件目录,部门。
总结
以上便是我结合《前端设计模式应用》这门课程的框架,以及自己的查询、认识与理解,简要汇总而成的一些前端设计模式的知识点。
希望对各位有所帮助!