js设计模式(26)
js设计模式(26)
JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表:
一、创建型模式
这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。
- 工厂模式(Factory Pattern)
提供创建对象的接口,具体的实例由子类决定。 - 抽象工厂模式(Abstract Factory Pattern)
创建相关对象家族的接口,而无需指定具体类。 - 单例模式(Singleton Pattern)
保证一个类只有一个实例,并提供一个全局访问点。 - 建造者模式(Builder Pattern)
将对象的构造过程与表示分离,使同样的构造过程可以创建不同的对象。 - 原型模式(Prototype Pattern)
通过复制现有实例来创建新的对象。
二、结构型模式
这些模式关注对象的组合,主要用于处理类和对象之间的关系。
- 适配器模式(Adapter Pattern)
将一个类的接口转换为另一个客户端期望的接口。 - 桥接模式(Bridge Pattern)
将抽象部分与实现部分分离,使它们可以独立变化。 - 组合模式(Composite Pattern)
将对象组合成树形结构来表示“整体-部分”的层次结构。 - 装饰器模式(Decorator Pattern)
动态地给对象添加新的功能,而不会影响其他对象。 - 外观模式(Facade Pattern)
提供一个统一的接口,用来访问子系统中的一群接口。 - 享元模式(Flyweight Pattern)
通过共享来减少内存使用,尤其是用于大量细粒度对象。 - 代理模式(Proxy Pattern)
为其他对象提供一种代理以控制对该对象的访问。
三、行为型模式
这些模式关注对象之间的通信和责任分配。
- 责任链模式(Chain of Responsibility Pattern)
通过一系列处理对象依次处理请求,直到有对象处理该请求为止。 - 命令模式(Command Pattern)
将请求封装为对象,从而使得可以用不同的请求、队列、日志来参数化对象。 - 解释器模式(Interpreter Pattern)
提供一个解释器来解释语言的语法,通常用于编译器或语法解析。 - 迭代器模式(Iterator Pattern)
提供一种方法来顺序访问集合对象中的元素,而不暴露其底层表示。 - 中介者模式(Mediator Pattern)
用一个中介对象来封装一组对象的交互,减少对象间的直接依赖。 - 备忘录模式(Memento Pattern)
在不破坏封装的前提下,捕获对象的内部状态,以便在以后恢复它。 - 观察者模式(Observer Pattern)
定义对象间的一对多依赖,当一个对象的状态改变时,依赖它的对象会自动收到通知。 - 状态模式(State Pattern)
允许对象在内部状态改变时改变其行为。 - 策略模式(Strategy Pattern)
定义一组算法,将每个算法封装起来,并使它们可以互换。 - 模板方法模式(Template Method Pattern)
定义算法的框架,并将一些步骤延迟到子类中,使得子类可以重新定义算法的某些步骤。 - 访问者模式(Visitor Pattern)
将操作与它们所作用的对象结构分离,使得可以在不改变对象的前提下定义新的操作。
四、并发型模式
JavaScript 是单线程的,但在异步编程场景下,也有一些设计模式来处理并发。
- 异步模式(Asynchronous Pattern)
处理异步操作的模式,如 Promise、async/await 等。 - 发布-订阅模式(Publish-Subscribe Pattern)
对象间通过发布事件和订阅事件进行通信,常用于事件驱动开发。 - 生产者-消费者模式(Producer-Consumer Pattern)
处理异步任务队列中的任务,适用于任务生产者和消费者之间的解耦。
为什么要用设计模式?
- 解决常见问题:设计模式提供了一套经过验证的解决方案,帮助开发者解决在软件设计中遇到的常见问题和挑战。
- 提高代码复用性:设计模式通过提供标准的解决方案,使得代码更加模块化和可重用,减少了重复代码的编写。
- 增强代码可维护性:通过使用设计模式,代码结构更加清晰,易于理解和维护。设计模式通常会提供清晰的责任划分,使得修改和扩展变得更加简单。
- 促进团队协作:设计模式为开发团队提供了共同的语言和规范,使得团队成员在沟通和协作时能够更好地理解和讨论设计方案。
- 降低复杂性:设计模式通过抽象和封装将复杂的系统分解为更易管理的小部分,从而降低系统的复杂性。
什么时候要用设计模式?
- 遇到重复问题:当你发现自己或团队在多个项目中遇到类似的问题时,可以考虑使用设计模式来提供通用的解决方案。
- 需要改进现有设计:如果现有的系统设计存在问题,如难以扩展、难以理解或维护,使用设计模式可以帮助改进设计,使系统更加灵活和可维护。
- 面临设计决策:当你需要在多种设计方案中做出选择时,设计模式可以提供清晰的指导和参考,帮助你做出合适的决策。
- 系统需要适应变化:如果系统需要经常适应变化(如新功能、新需求),设计模式可以帮助你设计出更具扩展性和灵活性的系统。
怎么根据场景和需求决定用什么设计模式?
- 分析问题:首先明确你要解决的问题或需求。例如,是要处理对象创建、对象结构、还是对象之间的交互?
- 了解设计模式:熟悉各种设计模式的特点和用途,了解它们各自适用的场景。设计模式通常可以分为创建型、结构型、行为型和并发型等类别,每种类别中的模式都有其特定的应用场景。
- 匹配模式:
- 创建型模式:如果你需要控制对象的创建过程或希望实现对象的复用,可以考虑使用工厂模式、单例模式等。
- 结构型模式:如果你需要处理对象之间的组合或扩展,可以使用适配器模式、装饰器模式等。
- 行为型模式:如果你需要处理对象之间的交互和职责分配,可以考虑使用观察者模式、策略模式等。
- 并发型模式:如果你需要处理异步任务或多线程操作,可以使用生产者-消费者模式、发布-订阅模式等。
- 考虑代码可维护性和灵活性:选择设计模式时,要考虑模式对代码的影响,包括如何提高代码的可维护性、扩展性和灵活性。
- 使用设计模式的原则:
- 简单性:选择最简单的设计模式来解决问题,避免过度设计。
- 适配性:确保设计模式适合当前的需求,并能够与现有系统良好地集成。
- 可测试性:选择设计模式时考虑系统的可测试性,确保系统的每个部分都能被有效测试。
通过以上步骤,你可以更好地根据具体场景和需求选择合适的设计模式,从而优化系统设计,提高代码质量。
相关文章:
js设计模式(26)
js设计模式(26) JavaScript 中常用的设计模式可以分为几大类,包括创建型模式、结构型模式和行为型模式。以下是它们的分类和常见设计模式的完整列表: 一、创建型模式 这些模式主要关注对象的创建方式,目的是降低系统耦合和复杂性。 工厂模…...
数据库中, drop、delete与truncate的区别?
在数据库中,drop、delete和truncate都可以用于删除数据,但它们之间有以下区别: 一、作用对象 drop:可以删除数据库对象,如表、视图、索引、存储过程等。例如:DROP TABLE table_name;可以删除名为 table_na…...
2024年项目经理不能错过的开源项目管理系统大盘点:全面指南
在2024年,随着项目管理领域的不断发展,开源项目管理系统成为了项目经理们提升工作效率的利器。本文将全面盘点几款备受推荐的开源项目管理系统,帮助项目经理们找到最佳选择,不容错过。 在项目管理日益复杂的今天,开源项…...
MATLAB基本语句
MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构,也可以出现对M-文件的调用(相当于对外部过程的调用)。 由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的,故其既有FORTRAN的特征,又在许多语言规…...
委托的注册及注销+观察者模式
事件 委托变量如果公开出去,很不安全,外部可以随意调用 所以取消public,封闭它,我们可以自己书写两个方法,供外部注册与注销,委托调用在子方法里调用,这样封装委托变量可以使它更安全,这个就叫…...
Jetpack02-LiveData 数据驱动UI更新(类似EventBus)
前提 LiveData使用了Lifecycle的生命周期,阅读本文前,请先了解Lifecycle源码。 简介 LiveData本质是数据类型,当改变数据的时候,会通知观察者,且只在界面可见的时候才会通知观察者。只能在主线程注册观察者…...
Redis 的 Java 客户端有哪些?官方推荐哪个?
Redis 官网展示的 Java 客户端如下图所示,其中官方推荐的是标星的3个:Jedis、Redisson 和 lettuce。 Redis 的 Java 客户端中,Jedis、Lettuce 和 Redisson 是最常用的三种。以下是它们的详细比较: Jedis: 线程安全&…...
工作笔记20240927——vscode + jlink调试
launch.json的配置,可以用的 {"name": "Debug","type": "cppdbg","request": "launch","miDebuggerPath": "./arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g…...
Python | Leetcode Python题解之第433题最小基因变化
题目: 题解: class Solution:def minMutation(self, start: str, end: str, bank: List[str]) -> int:if start end:return 0def diffOne(s: str, t: str) -> bool:return sum(x ! y for x, y in zip(s, t)) 1m len(bank)adj [[] for _ in ra…...
opengauss使用遇到的问题,随时更新
一、查看数据库状态的方式 1、gs_ctl -D /opt/huawei/install/data/dn/ status 2、gs_om -t status --detail 3、cm_ctl query -Cv二、opengauss打印WDR性能报告 1、开启WDR性能参数开关 gs_guc reload -N all -D /opt/huawei/install/data/dn -c "enable_wdr_snap…...
从环境部署到开发实战:消息队列 RocketMQ
文章目录 一、消息队列简介1.1 什么是消息队列1.2 常见消息队列对比1.3 RockectMQ 核心概念1.4 RockectMQ 工作机制 (★) 二、RocketMQ 部署相关2.1 服务器单机部署2.2 管控台页面 三、RocketMQ 的基本使用3.1 入门案例3.2 消息发送方式3.2.1 同步消息3.…...
【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版
文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…...
渗透测试-文件上传绕过思路
文件上传绕过思路 引言 分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达;本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#x…...
等保测评中的密码学应用分析
等保测评中密码学应用的分析 等保测评(信息安全等级保护测评)是中国信息安全领域的一项重要活动,旨在评估信息系统的安全性,并根据评估结果给予相应的安全等级。在等保测评中,密码学应用分析是评估信息系统安全性的关键…...
LCR 007. 三数之和
文章目录 1.题目2.思路3.代码 1.题目 LCR 007. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c *,*使得 a b c 0 ?请找出所有和为 0 且 不重复 的三元组。 示例 1:…...
【入门01】arcgis api 4.x 创建地图、添加图层、添加指北针、比例尺、图例、卷帘、图层控制、家控件(附完整源码)
1.效果 2.代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title></title><link rel"s…...
STL迭代器标签
STL(标准模板库)迭代器标签是用来标识迭代器类型的分类机制。这些标签有助于确定迭代器的特性,比如它是否可以进行随机访问、是否支持修改元素等。主要的迭代器标签包括: Input Iterator:只读迭代器,可以顺…...
容器学习之SparseArray源码解析
1、SparseArray是android sdk 提供集合类,主要用来替换key 为int类型,value为Object类型的Hashmap 2、SparseArray和HashMap相比优缺点: 优点: 1、SparseArray存在一个int[]keys, 因此避免自动装箱 2、SparseArray扩容时只需要数…...
信创改造技术介绍
目录 服务发现和注册 Sentinel 核心功能 典型应用场景 gateway 网关的主要功能 Spring Cloud Gateway Kong Kong 的主要功能 Kong 的架构: Kong 的使用场景: Kong 的部署模式: 优势 Gateway与Sentinel区别 Gateway Sentinel …...
【可见的点——欧拉函数】
在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(不包括1) 题目 思路 有三个点比较特殊(因为一来这三个点一定可见,同时也无法用gcd 1判断):(0&am…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...
Docker、Wsl 打包迁移环境
电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本: 2.2.4.0 内核版本: 5.15.153.1-2 WSLg 版本: 1.0.61 MSRDC 版本: 1.2.5326 Direct3D 版本: 1.611.1-81528511 DXCore 版本: 10.0.2609…...
