什么是设计模式
软件设计中常见问题的解决方案模型,就是设计模式
为什么要学习设计模式
- 代码结构清晰: 设计模式提供了一种组织代码的方式,使其更加清晰、易于理解和维护。通过使用适当的设计模式,你可以将代码分离成各个独立的组件,每个组件负责特定的功能,从而使整个代码库更有条理。
- 可维护性和可扩展性: 设计模式鼓励使用一些经过验证的方法和结构,这些方法在项目的后续阶段能够更轻松地进行维护和扩展。使用设计模式可以降低代码变更对其他部分的影响,减少引入 bug 的风险。
- 复用性: 设计模式鼓励代码的模块化和重用。通过将常见的解决方案抽象成模式,你可以在不同的项目中使用相同的模式,从而避免重复编写相似的代码。
- 团队协作: 当多人共同开发一个项目时,采用共同的设计模式可以使代码更具一致性,降低沟通成本。团队成员可以更轻松地理解代码,因为他们都熟悉设计模式的概念。
- 解决常见问题: 前端开发中有许多常见的问题,如数据同步、异步处理、状态管理等。设计模式提供了一些经过验证的解决方案,可以帮助你更快地解决这些问题。
- 提升编程思维: 学习设计模式能够培养抽象思维、模式识别和问题分解能力。这些能力不仅对前端开发有益,也对其他领域的编程工作有帮助。
- 跨框架和跨语言: 很多设计模式是通用的,不仅适用于前端开发,也适用于其他领域和编程语言。通过学习设计模式,你能够更好地理解和应用各种编程环境。
接下来来就给大家介绍一下23 种设计模式
23种设计模式
-
创建型:(如何创建一个对象)
- 抽象工厂、工厂、单例、建造者、原型
-
结构型:(如何灵活的将对象组装成较大的结构)
- 桥接、代理、装饰器、适配器、享元、组合、门面(外观)
-
行为型:(负责对象间的高效通信个职责划分)
- 观察者、模板、迭代、状态、命令、中介者、解释器、职责链、访问者、策略、备忘录
浏览器中的设计模式
- 单例模式
- 发布订阅者模式
单例模式
定义
全局唯一访问对象
应用场景
缓存,全局状态管理等。
例子:用单例模式实现请求缓存
发布订阅者模式
定义
一种订阅机制,可在被订阅对象发生变化时通知订阅者。
应用场景
从系统架构之间的解耦,到业务中一些实现模式,像邮件订阅,上线订阅等等,应用广泛。
例子:用发布订阅者模式实现用户上线订阅
JavaScript中的设计模式
- 原型模式
- 代理模式
- 迭代器模式
原型模式
定义
复制已有对象来创建新的对象
应用场景
Js中对象创建的基本模式
例子:用原型模式创建上线订阅中的用户
代理模式
定义
可自定义控制对原对象的访问方式,并且允许在更新前后做一些额外处理
应用场景
监控,代理工具,前端框架实现等等
例子:使用代理模式实现用户状态订阅
迭代器模式
定义
在不暴露数据类型的情况下访问集合中的数据
应用场景
数据结构中有多种数据类型,列表,树等,提供通用操作接口
例子:用for of迭代所有组件
前端中的设计模式
- 代理模式
- 组合模式
代理模式
定义
应用场景
给原类添加非功能性需求,为了将代码与原业务解耦。
业务系统的非功能性需求开发:监控、统计、鉴权、限流、日志、缓存。
例子:通过接口实现
组合模式
定义
可多个对象组合使用,可也单个对象独立使用
应用场景
DOM,前端瑞组件,文件目录,部门
例子:React的组件结构
总结
学习了前端设计模式后,我深刻认识到在开发复杂的前端应用时,合理运用设计模式可以提高代码的可维护性、扩展性和重用性。设计模式是经过实践验证的通用解决方案,可以帮助开发者更好地组织代码,减少重复劳动,并降低出现错误的风险。
首先,我学习了各种常见的前端设计模式,如单例模式、工厂模式、观察者模式等。了解这些模式的原理和应用场景后,我可以在不同的情况下选择合适的设计模式来解决问题。例如,单例模式可以确保一个类只有一个实例,工厂模式可以根据不同的需求创建不同的对象,观察者模式可以实现对象之间的松耦合通信。
其次,通过学习设计模式,我掌握了更优雅、可读性更高的代码组织方式。设计模式提供了一种结构化的方法来组织代码,使得不同部分之间的关系更加清晰。这有助于团队协作,降低项目维护的难度,并促使我写出更加健壮的代码。
另外,我学会了如何将设计模式应用于前端框架和库中。很多前端框架和库已经内置了一些设计模式,通过学习它们的源码,我可以更好地理解这些工具是如何利用设计模式来解决实际问题的。这有助于我更好地使用这些工具,同时也为我在项目中自己实现设计模式提供了借鉴。