js设计模式(26)

ops/2024/12/22 9:24:26/

js设计模式(26)

JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表:

一、创建型模式

这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。

  1. 工厂模式(Factory Pattern)
    提供创建对象的接口,具体的实例由子类决定。
  2. 抽象工厂模式(Abstract Factory Pattern)
    创建相关对象家族的接口,而无需指定具体类。
  3. 单例模式(Singleton Pattern)
    保证一个类只有一个实例,并提供一个全局访问点。
  4. 建造者模式(Builder Pattern)
    将对象的构造过程与表示分离,使同样的构造过程可以创建不同的对象。
  5. 原型模式(Prototype Pattern)
    通过复制现有实例来创建新的对象。

二、结构型模式

这些模式关注对象的组合,主要用于处理类和对象之间的关系。

  1. 适配器模式(Adapter Pattern)
    将一个类的接口转换为另一个客户端期望的接口。
  2. 桥接模式(Bridge Pattern)
    将抽象部分与实现部分分离,使它们可以独立变化。
  3. 组合模式(Composite Pattern)
    将对象组合成树形结构来表示“整体-部分”的层次结构。
  4. 装饰器模式(Decorator Pattern)
    动态地给对象添加新的功能,而不会影响其他对象。
  5. 外观模式(Facade Pattern)
    提供一个统一的接口,用来访问子系统中的一群接口。
  6. 享元模式(Flyweight Pattern)
    通过共享来减少内存使用,尤其是用于大量细粒度对象。
  7. 代理模式(Proxy Pattern)
    为其他对象提供一种代理以控制对该对象的访问。

三、行为型模式

这些模式关注对象之间的通信和责任分配。

  1. 责任链模式(Chain of Responsibility Pattern)
    通过一系列处理对象依次处理请求,直到有对象处理该请求为止。
  2. 命令模式(Command Pattern)
    将请求封装为对象,从而使得可以用不同的请求、队列、日志来参数化对象。
  3. 解释器模式(Interpreter Pattern)
    提供一个解释器来解释语言的语法,通常用于编译器或语法解析。
  4. 迭代器模式(Iterator Pattern)
    提供一种方法来顺序访问集合对象中的元素,而不暴露其底层表示。
  5. 中介者模式(Mediator Pattern)
    用一个中介对象来封装一组对象的交互,减少对象间的直接依赖。
  6. 备忘录模式(Memento Pattern)
    在不破坏封装的前提下,捕获对象的内部状态,以便在以后恢复它。
  7. 观察者模式(Observer Pattern)
    定义对象间的一对多依赖,当一个对象的状态改变时,依赖它的对象会自动收到通知。
  8. 状态模式(State Pattern)
    允许对象在内部状态改变时改变其行为。
  9. 策略模式(Strategy Pattern)
    定义一组算法,将每个算法封装起来,并使它们可以互换。
  10. 模板方法模式(Template Method Pattern)
    定义算法的框架,并将一些步骤延迟到子类中,使得子类可以重新定义算法的某些步骤。
  11. 访问者模式(Visitor Pattern)
    将操作与它们所作用的对象结构分离,使得可以在不改变对象的前提下定义新的操作。

四、并发型模式

JavaScript 是单线程的,但在异步编程场景下,也有一些设计模式来处理并发。

  1. 异步模式(Asynchronous Pattern)
    处理异步操作的模式,如 Promise、async/await 等。
  2. 发布-订阅模式(Publish-Subscribe Pattern)
    对象间通过发布事件和订阅事件进行通信,常用于事件驱动开发。
  3. 生产者-消费者模式(Producer-Consumer Pattern)
    处理异步任务队列中的任务,适用于任务生产者和消费者之间的解耦。

为什么要用设计模式

  1. 解决常见问题设计模式提供了一套经过验证的解决方案,帮助开发者解决在软件设计中遇到的常见问题和挑战。
  2. 提高代码复用性设计模式通过提供标准的解决方案,使得代码更加模块化和可重用,减少了重复代码的编写。
  3. 增强代码可维护性:通过使用设计模式,代码结构更加清晰,易于理解和维护。设计模式通常会提供清晰的责任划分,使得修改和扩展变得更加简单。
  4. 促进团队协作设计模式为开发团队提供了共同的语言和规范,使得团队成员在沟通和协作时能够更好地理解和讨论设计方案。
  5. 降低复杂性设计模式通过抽象和封装将复杂的系统分解为更易管理的小部分,从而降低系统的复杂性。

什么时候要用设计模式

  1. 遇到重复问题:当你发现自己或团队在多个项目中遇到类似的问题时,可以考虑使用设计模式来提供通用的解决方案。
  2. 需要改进现有设计:如果现有的系统设计存在问题,如难以扩展、难以理解或维护,使用设计模式可以帮助改进设计,使系统更加灵活和可维护。
  3. 面临设计决策:当你需要在多种设计方案中做出选择时,设计模式可以提供清晰的指导和参考,帮助你做出合适的决策。
  4. 系统需要适应变化:如果系统需要经常适应变化(如新功能、新需求),设计模式可以帮助你设计出更具扩展性和灵活性的系统。

怎么根据场景和需求决定用什么设计模式

  1. 分析问题:首先明确你要解决的问题或需求。例如,是要处理对象创建、对象结构、还是对象之间的交互?
  2. 了解设计模式:熟悉各种设计模式的特点和用途,了解它们各自适用的场景。设计模式通常可以分为创建型、结构型、行为型和并发型等类别,每种类别中的模式都有其特定的应用场景。
  3. 匹配模式
    • 创建型模式:如果你需要控制对象的创建过程或希望实现对象的复用,可以考虑使用工厂模式、单例模式等。
    • 结构型模式:如果你需要处理对象之间的组合或扩展,可以使用适配器模式、装饰器模式等。
    • 行为型模式:如果你需要处理对象之间的交互和职责分配,可以考虑使用观察者模式、策略模式等。
    • 并发型模式:如果你需要处理异步任务或多线程操作,可以使用生产者-消费者模式、发布-订阅模式等。
  4. 考虑代码可维护性和灵活性:选择设计模式时,要考虑模式对代码的影响,包括如何提高代码的可维护性、扩展性和灵活性。
  5. 使用设计模式的原则
    • 简单性:选择最简单的设计模式来解决问题,避免过度设计。
    • 适配性:确保设计模式适合当前的需求,并能够与现有系统良好地集成。
    • 可测试性:选择设计模式时考虑系统的可测试性,确保系统的每个部分都能被有效测试。

通过以上步骤,你可以更好地根据具体场景和需求选择合适的设计模式,从而优化系统设计,提高代码质量。


http://www.ppmy.cn/ops/120183.html

相关文章

C++初阶:STL详解(十)——priority_queue的介绍,使用以及模拟实现

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C:由浅入深篇 小新的主页:编程版小新-CSDN博客 一.priority_queue的介绍 优先级队列被实现…

蓝桥杯模块二:数码管的静态、动态实现

模块二训练 1.静态显示 一、数码管电路图 二、电路分析 1.数码管电路分析 端口分公共端和段码,先用公共端控制一个数码管,再用段码实现显示数字。共阳数码管公共端输入高电平,段码输入低电平实现点亮 2.锁存器 Y7控制段码,Y6控…

开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程

摘要:本文深入探讨了 KOC 在立体连接中的重要性,以及如何通过开源链动 21 模式 S2B2C 商城小程序发现和找到更多的 KOC。强调了历史积累强关系和快速强化强关系的方法,并阐述了该商城小程序在推动商业发展中的关键作用。 一、引言 在当今竞争…

手机如何五开玩梦幻西游端游?用GameViewer远程手机免费畅玩梦幻西游

用手机就能免费玩梦幻西游端游,还可以随时查看挂机进度! 想要实现这一点,就用网易GameViewer远程,而且不光手机可以玩梦幻西游端游,平板也能免费玩,并为你实现五开玩梦幻西游端游。 那么,通过Ga…

Cilium + ebpf 系列文章- (六)Cilium-BGP与分发-EXTERNAL-IP

一、首先你安装的Cilium需要支持BGP cilium install \--version v1.16.1 \--set ipam.modekubernetes \--set routingModenative \--set ipv4NativeRoutingCIDR"10.0.0.0/8" \--set bgpControlPlane.enabledtrue \--set k8s.requireIPv4PodCIDRtrue 这个命令用于安…

【JVM】双亲委派模型

文章目录 双亲委派模型(面试高频)类加载器工作过程存在意义 双亲委派模型(面试高频) 之所以这个东西面试出场概率高高,最大的原因就是它起的名字很好听 描述了查找 .class 文件的策略。 类加载器 JVM 中进行类加载的…

【MySQL】MySQL库的操作

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:掌握对库操作的语句并能熟练掌握。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! > 专栏选自&#x…

深入解析Excel文件格式:.xls与.xlsx的差异与应用指南

在当今的数据处理和办公自动化领域,Microsoft Excel 无疑是一款极为重要的工具。 它不仅广泛应用于日常的数据录入、计算和图表制作,而且也是数据分析、财务建模等专业 领域不可或缺的软件。Excel 的文件格式经历了多个版本的迭代,其中 .xl…