- 什么是设计模式
- 本质是将面向对象设计原则实际应用到软件开发中
- 针对常见问题和需求的解决方案的可复用设计方案
- 提供用于解决特定问题及需求的可复用解决方案
- 设计模式的作用
- 帮助开发人员在设计和编写代码时遵循一系列约定和原则
- 提高代码的可重用性、可读性、可维护性和可扩展性,同时减少错误和降低风险。
- 三大类型(共二十三种设计模式)
- 创建型模式(五种)-如何创建一个对象
- 结构型模式(七种)-如何灵活的将对象组装成较大的结构
- 行为型模式(十一种)-负责对象间的高效通信和职责划分
- 设计模式在前端中的实际应用
-
浏览器中的设计模式
- 单例模式
- 定义:一个类只能被实例化一次,全局唯一访问对象
- 应用场景:缓存、管理资源、配置对象或全局状态等,即适用于需要共享资源的场景。
-
举例:
class Singleton { constructor() { if (!Singleton.instance) { Singleton.instance = this; } return Singleton.instance; } } // 使用示例 const instance1 = new Singleton(); const instance2 = new Singleton(); console.log(instance1 === instance2); // 输出true //上述代码中,创建了一个 Singleton 类,Singleton 类的构造函数定义为私有的, 防止外部直接创建实例。构造函数内部通过检查Singleton.instance 的存在来决定 是否创建新的实例,确保全局只有一个实例。
- 发布订阅模式(观察者模式)
- 定义:一种订阅机制,可在被订阅对象发生变化时通知订阅者
- 应用场景:从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,线上订阅等等那些需要实时更新用户界面的场景。
- 单例模式
-
JS三大模型
-
原型模式
- 定义:复制已有对象来创建新的对象,而无需通过实例化类来创建新对象。
- 应用场景:JS中对象创建的基本模式,适用在需要复制对象并且对象创建过程复杂、耗时或需要保护对象隐私信息的情况下。
-
举例
``` // 原型类 class Prototype { constructor() { this.value = 0; } clone() { // 使用对象的浅拷贝来复制对象 return Object.assign(Object.create(Object.getPrototypeOf(this)), this); } } // 使用示例 const prototype = new Prototype(); prototype.value = 10; // 克隆原型对象 const clone1 = prototype.clone(); const clone2 = prototype.clone(); console.log(clone1.value); // 输出:10 console.log(clone2.value); // 输出:10 //上述例子中,我们定义了一个原型类 Prototype,它包含属性 value,并定义了一个 clone() 方法,使用深拷贝来复制对象并返回新的对象。我们创建了一个原型对象 prototype, 将其 value 设置为 10,并通过克隆原型对象得到了两个新的对象 clone1 和 clone2。 最后,打印这两个克隆对象的 value 属性,发现它们与原型对象的值相同,都是 10。
-
代理模式
- 定义: 可自定义控制对原对象的访问方式,并且允许在更新前后做一些额外处理
- 应用场景: 监控,代理工具,前端框架实现等等,适合那些需要控制对某些敏感资源的访问的场景。
-
迭代器模式
- 定义:在不暴露数据类型的情况下访问集合中的数据
- 应用场景:数据结构中有多种数据类型,列表,树等,提供通用操作接口
-
-
前端框架中的设计模式
- 代理模式
- 组合模式
- 定义:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。不同对象组合,关系用树型表示。
- 应用场景:菜单和菜单项,组织机构等等需要处理树状结构、部分-整体关系、递归组合以及统一操作接口的场景。
-