javascript设计模式总结
参考
通过设计模式可以增加代码的可重用性、可扩展性、可维护性
设计模式五大设计原则
单一职责:一个程序只需要做好一件事,如果结构过于复杂就拆分开,保证每个部分独立
开放封闭原则:对扩展开放,对修改封闭。增加需求时扩展新代码而不是修改源代码。
里氏置换原则:子类覆盖父类,父类能出现的地方子类也能出现。
接口独立原则:保持接口单一独立,避免出现胖接口。
依赖导致原则:面向接口编程,依赖于抽象而不依赖于具体。使用方只用专注于接口而不用专注于具体类的实现。
设计模式三大类
创建 结构 行为
创建类:工厂模式、抽象工厂模式、建造者模式、单例模式、原型模式
结构类:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为类:策略模式、模版方法模式、发布订阅模式、迭代器模式、职责链模式、命令模式、备忘录模式、状态模式、访问者模式、中介模式、解释器模式
工厂模式
优点:
调用者创建对象时只需要知道类的名称
扩展性高
隐藏产品的具体实现,只用关心接口
缺点:
每次增加一个产品时都需要增加一个具体的类,这增加了系统的内存压力,也增加了具体类的依赖
例如一个服装厂可以卖不同的衣服
class DownJacket {production() {console.log('生产羽绒服')}
}
class TShirt {production() {console.log('生产t恤')}
}class ClothingFactory {constructor() {this.downJacket = DownJacketthis.tShirt = TShirt}getFactory(clothingType) {const _production = new this[clothingType]return _production.production()}
}const downJacket = new ClothingFactory()
downJacket.getFactory('downJacket')
结果:生产羽绒服
后续更新。。。。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
javascript设计模式总结
参考 通过设计模式可以增加代码的可重用性、可扩展性、可维护性 设计模式五大设计原则 单一职责:一个程序只需要做好一件事,如果结构过于复杂就拆分开,保证每个部分独立 开放封闭原则:对扩展开放,对修改封闭。增加需…...
![](https://i-blog.csdnimg.cn/direct/efa7a173ab774b9482e106cc99c71f31.png)
gpt-4o看图说话-根据图片回答问题
问题:中国的人口老龄化究竟有多严重? 代码下实现如下:(直接调用openai的chat接口) import os import base64 import requests def encode_image(image_path): """ 对图片文件进行 Base64 编码 输入…...
![](https://www.ngui.cc/images/no-images.jpg)
【MySQL】7.MySQL 的内置函数
MySQL的内置函数 一.日期函数二.字符串函数三.数学函数四.其它函数 一.日期函数 函数名称说明current_date()当前日期current_time()当前时间current_timestamp当前时间戳(日期时间)date(datetime)截取 datetime 的日期部分date_add(date, interval d_value_type)给 date 添加…...
![](https://www.ngui.cc/images/no-images.jpg)
爬虫:Sentry-Span参数逆向
在抓某眼查数据太过频繁时会出现极验的验证码。极验的教程有很多,主要是发现在这里获取验证码的时候需要携带参数Sentry-Span。在这里记录一下逆向的主要过程,直接上补环境的代码。 window global; location {}; my_log console.log;(function () {l…...
![](https://www.ngui.cc/images/no-images.jpg)
音视频入门基础:H.264专题(12)——FFmpeg源码中通过SPS属性计算视频分辨率的实现
一、引言 在上一节《音视频入门基础:H.264专题(11)——计算视频分辨率的公式》中,讲述了通过SPS中的属性计算H.264编码的视频的分辨率的公式。本文讲解FFmpeg源码中计算视频分辨率的实现。 二、FFmpeg源码中计算视频分辨率的实现…...
![](https://i-blog.csdnimg.cn/direct/22596d8b1b064898925d6830c4d82fbf.jpeg)
基于颜色模型和边缘检测的火焰识别FPGA实现,包含testbench和matlab验证程序
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 将FPGA仿真结果导入到matlab显示结果: 测试样本1 测试样本2 测试样本3 2.算法运行软件版本 vivado2019.2 …...
![](https://i-blog.csdnimg.cn/direct/6dcfaaf967f447908f935c2681f651b6.png)
golang json反序列化科学计数法的坑
问题背景 func CheckSign(c *gin.Context, signKey string, singExpire int) (string, error) {r : c.Requestvar formParams map[string]interface{}if c.Request.Body ! nil {bodyBytes, _ : io.ReadAll(c.Request.Body)defer c.Request.Body.Close()if len(bodyBytes) >…...
![](https://i-blog.csdnimg.cn/direct/21c7cf9904904c4a9c1b4452585435bc.png)
罗技K380无线键盘及鼠标:智慧互联,一触即通
目录 1. 背景2. K380无线键盘连接电脑2.1 键盘准备工作2.2 电脑配置键盘的连接 3. 无线鼠标的连接3.1 鼠标准备工作3.2 电脑配置鼠标的连接 1. 背景 有一阵子经常使用 ipad,但是对于我这个习惯于键盘打字的人来说,慢慢在 ipad 上打字,实在是…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
卸载wps office的几种方法收录
第一种方法: 1.打开【任务管理器】,找到相关程序,点击【结束任务】。任务管理器可以通过左下角搜索找到。 2.点击【开始】-【设置】-【应用】-下拉找到WPS应用,右键卸载,不保留软件配置 …...
![](https://i-blog.csdnimg.cn/direct/0c5f2932d4c347e2b072ae17fb1d152e.png)
SpringCloud第一篇Docker基础
文章目录 一、常见命令二、数据卷三、数据挂载四、自定义镜像五、网络 一、常见命令 Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/ 需求: 在DockerHub中搜索Nginx镜像,查看镜像的名称 …...
![](https://i-blog.csdnimg.cn/direct/a52a9e00e1354ce4b0994a2ca32021a3.png)
从零开始学习PX4源码3(如何上传官网源码到自己的仓库中)
目录 文章目录 目录摘要1.将PX4源码上传至腾讯工蜂2.从腾讯工蜂克隆源码到本地ubuntu3.如何查看自己源码的版本信息 摘要 本节主要记录从零开始学习PX4源码3(如何上传官网源码到自己的仓库中)及如何查看PX4的固件版本信息,欢迎批评指正! PX4源码版本V1.…...
![](https://www.ngui.cc/images/no-images.jpg)
Docker Compose 启动容器例子
Docker Compose 启动容器例子 Docker Compose 文件 (docker-compose.yml) version: 3.8services:web:image: nginx:latestports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmlnetworks:- webnetdb:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: exam…...
![](https://www.ngui.cc/images/no-images.jpg)
守护服务之门:Eureka中分布式认证与授权的实现策略
守护服务之门:Eureka中分布式认证与授权的实现策略 引言 在微服务架构中,服务间的通信安全至关重要。Eureka作为Netflix开源的服务发现框架,虽然本身提供了服务注册与发现的功能,但并不直接提供认证与授权机制。为了实现服务的分…...
![](https://i-blog.csdnimg.cn/direct/e2a119f9c8844cbfa936100ea027fa48.png#pic_center)
核密度估计KDE和概率密度函数PDF(深入浅出)
目录 1. 和密度估计(KDE)核密度估计的基本原理核密度估计的公式核密度估计的应用Python中的KDE实现示例代码 结果解释解释结果 总结 2. 概率密度函数(PDF)概率密度函数(PDF)是怎么工作的:用图画…...
![](https://i-blog.csdnimg.cn/direct/6a834f9a447c4ea4bd27c06b550aaefe.jpeg)
免开steam 脱离steam 进行游戏的小工具
链接:https://pan.baidu.com/s/1k2C8b4jEqKIGLtLZp8YCgA?pwd6666 提取码:6666 我们只需选择游戏根目录 然后输入AppID 点击底部按钮 进行就可以了 关于AppID在:...
![](https://i-blog.csdnimg.cn/direct/b90ee02b76b7413cb22c74827447890a.png)
深度学习--系统配置流程
Win10系统配置双系统Ubuntu18.04 深度学习台式服务器自装练手1.win10磁盘管理2.下载系统镜像制作U盘3.系统安装4. 安装后的系统设置工作5.配置CUDA环境CUDNN安装 深度学习台式服务器自装练手 写在最前 CUDA最高支持11.4 显卡3060 1.win10磁盘管理 首先对原有磁盘进行分区整理…...
![](https://www.ngui.cc/images/no-images.jpg)
把Docker的虚拟磁盘文件移动到别的盘符
今天清理C盘空间,发现一个很大的文件 ext4.vhdx 足有 15G 之多,发现这个是Docker的虚拟磁盘文件,于是在网上找到移到它的办法,使用 PowerShell 执行下面命令 查看Docker状态和版本 wsl -l -v 关闭Docker服务 wsl --shutdown …...
![](https://www.ngui.cc/images/no-images.jpg)
Oracle 19c RAC 心跳异常处理
客户机房异常断电后,启动19c集群报错如下 2024-07-05 17:43:27.934 [GIPCD(5964292)]CRS-42216: No interfaces are configured on the local node for interface definition en3(:.*)?:100.100.100.0: available interface definitions are [en0(:.*)?:10.88.0.…...
![](https://i-blog.csdnimg.cn/direct/57922296d7d84abc852e3621ce0bc26e.png)
微信小程序引入自定义子组件报错,在 C:/Users/***/WeChatProjects/miniprogram-1/components/路径下***
使用原生小程序开发时候,会报下面的错误, [ pages/button/button.json 文件内容错误] pages/button/button.json: [“usingComponents”][“second-component”]: “…/…/components/second-child/index”,在 C:/Users/***/WeChatProjects/m…...
![](https://img-blog.csdnimg.cn/direct/50955d65dfd44eedbfdc0f20682a92d5.png)
【图解大数据技术】流式计算:Spark Streaming、Flink
【图解大数据技术】流式计算:Spark Streaming、Flink 批处理 VS 流式计算Spark StreamingFlinkFlink简介Flink入门案例Streaming Dataflow Flink架构Flink任务调度与执行task slot 和 task EventTime、Windows、WatermarksEventTimeWindowsWatermarks 批处理 VS 流式…...
![](https://www.ngui.cc/images/no-images.jpg)
启动完 kubelet 日志显示 failed to get azure cloud in GetVolumeLimits, plugin.host: 1
查看 kubelet 日志组件命令 journalctl -xefu kubelet 文字描述问题 Jul 09 07:45:17 node01 kubelet[1344]: I0709 07:45:17.410786 1344 operation_generator.go:568] MountVolume.SetUp succeeded for volume "default-token-mfzqf" (UniqueName: "ku…...
![](https://img-blog.csdnimg.cn/img_convert/28298dd72a359c8aed7844ae92a172fc.png)
C语言基础and数据结构
C语言程序和程序设计概述 程序:可以连续执行的一条条指令的集合 开发过程:C源程序(.c文件) --> 目标程序(.obj二进制文件,目标文件) --> 可执行文件(.exe文件) -->结果 在任何机器上可以运行C源程序生成的 .exe 文件 没有安装C语言集成开发环境,不能编译C语言程…...
![](https://img-blog.csdnimg.cn/img_convert/b4fcb89ef5f175c9334586ad1a947b71.png)
【超万卡GPU集群关键技术深度分析 2024】_构建10万卡gpu集群的技术挑战
文末有福利! 1. 集群高能效计算技术 随着大模型从千亿参数的自然语言模型向万亿参数的多模态模型升级演进,超万卡集群吸需全面提升底层计算能力。 具体而言,包括增强单芯片能力、提升超节点计算能力、基于 DPU (Data Processing Unit) 实现…...
![](https://www.ngui.cc/images/no-images.jpg)
RuntimeError: CUDA error: invalid device ordinal
RuntimeError: CUDA error: invalid device ordinal 报错分析:可能原因1:设置CUDA_VISIBLE_DEVICES的问题解决办法: 可能原因2:硬件或驱动原因解决方法: 参考资料 报错分析: 如果你在运行代码时报错&#…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在Qt中添加文本
在Qt中添加文本通常涉及到使用几种不同的Qt控件,具体取决于你想要在何处以及以何种方式显示文本。以下是一些常见的方法: 1. 使用QLabel显示文本 QLabel是Qt中用于显示文本或图片的简单控件。你可以通过构造函数或setText()方法设置其显示的文本。 #i…...
![](https://i-blog.csdnimg.cn/direct/a73647be68704ada9751689f099da0ea.png)
解决打印PDF文本不清楚的处理办法
之前打印PDF格式的电子书,不清晰,影响看书的心情,有时看到打印的书的质量,根本不想看,今天在打印一本页数不多,但PDF格式的书感觉也不太清楚,我想应该有办法解决,我使用的是解决福昕…...
![](https://www.ngui.cc/images/no-images.jpg)
【Cesium开发实战】火灾疏散功能的实现,可设置火源点、疏散路径、疏散人数
Cesium有很多很强大的功能,可以在地球上实现很多炫酷的3D效果。今天给大家分享一个可自定义的火灾疏散人群的功能。 1.话不多说,先展示 火灾疏散模拟 2.设计思路 根据项目需求要求,可设置火源点、绘制逃生路线、可设置逃生人数。所以点击火…...
![](https://i-blog.csdnimg.cn/direct/f9cb5766189441398c054b97a201430b.png)
imx6ull/linux应用编程学习(16)emqx ,mqtt创建连接mqtt.fx
在很多项目中都需要自己的私人服务器,以保证数据的隐私性,这里我用的是emqx。 1.进入emqx官网 EMQX:用于物联网、车联网和工业物联网的企业级 MQTT 平台 点击试用cloud 申请成功后可得:(右边的忽略) 进入…...
![](https://www.ngui.cc/images/no-images.jpg)
Debezium系列之:验证mysql、mariadb等兼容mysql协议数据库账号权限
Debezium系列之:验证mysql、mariadb等兼容mysql协议数据库账号权限 一、数据库需要开启binlog二、创建账号和账号需要赋予的权限三、账号具有权限查看日志信息四、验证账号权限五、验证账号能否执行show master status六、验证数据库是否开启binlog一、数据库需要开启binlog …...
![](https://i-blog.csdnimg.cn/direct/d9991c3e3dfc4916bc705cff94c9a1e7.png)
Vue.js学习笔记(五)抽奖组件封装——转盘抽奖
基于VUE2转盘组件的开发 文章目录 基于VUE2转盘组件的开发前言一、开发步骤1.组件布局2.布局样式3.数据准备 二、最后效果总结 前言 因为之前的转盘功能是图片做的,每次活动更新都要重做UI和前端,为了解决这一问题进行动态配置转盘组件开发,…...
![](/images/no-images.jpg)
amon wordpress/深圳谷歌seo公司
【实例简介】使用前,请先阅读使用说明,这是用java编写的LR1语法分析器,请用Eclipse打开!.里面包含整个实验报告【实例截图】【核心代码】d12b69a3-ed46-4cca-8833-759343880876└── 编译原理课程设计final├── 报告.doc├──…...
![](https://img-blog.csdnimg.cn/img_convert/f815bb64db1a27a2cf73a0fe01e32de8.png)
wordpress 添加样式表/营销策划方案ppt
java提供了System类可以让我们和操作系统打交道,我们可以使用System.getProperty(参数名)和System.getProperties()获取操作系统的相关属性。所以可以利用System.getProperty()获取当前的工作目录:System.getProperty("user.dir")也可以使用Sy…...
![](https://img-blog.csdnimg.cn/20210601092429586.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEzMjk5Njc=,size_16,color_FFFFFF,t_70)
b s架构做网站好处/品牌营销策划书
UG570 在线配置相关: 1、动态编辑Xilinx FPGA内LUT https://mp.weixin.qq.com/s/UgL3XbxGSskd5SK7xDlJUw 2、在线修改Xilinx FPGA嵌入式RAM比特流 https://mp.weixin.qq.com/s/MxRZqKQVSZ06lIWR5rEHoA 注: 最近在微信公众号确实发现不少好文章ÿ…...
![](https://img-blog.csdnimg.cn/20191215170928849.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Jpa2V5b25l,size_16,color_FFFFFF,t_70)
应用程序安装下载/seo排名是什么
接口API seq_file 系列函数是为了方便内核导出信息到 sysfs、debugfs、procfs 实现的。以往的内核也存在各种形式的实现,但是都无法避免个别实现会产生一些漏洞,这一套函数实现可以让内核导出信息更加简单和统一稳定,维护起来更加方便。 它…...
![](https://img-blog.csdnimg.cn/img_convert/3d55af0b00f7513dc3c0e4cae0d502fa.webp?x-oss-process=image/format,png)
一个独立IP做几个网站比较合适/抖音的商业营销手段
前言 目前开发的SpringBoot项目在启动的时候需要预加载一些资源。而如何实现启动过程中执行代码,或启动成功后执行,是有很多种方式可以选择,java培训我们可以在static代码块中实现,也可以在构造方法里实现,也可以使用…...
![](/images/no-images.jpg)
做视频网站视频/今日新闻头条新闻最新
如果创建了索引(a,b),再创建索引(a)就是冗余索引,这会影响性能。 在MySQL 5.6 或更高版本,可以直接在sys库中查询schema_redundant_indexes表,就可以能获取到冗余索引信息ÿ…...