编程设计模式助记顺口溜
1、顺口溜
创建型,工厂多,
单例建对象,抽象工厂做。
建造者分步做,原型克隆最不愁。
结构型,适配器,
桥接组合都不错,
装饰外观飞享元,代理再添一把火。
行为型,责任链,
命令解释迭代先。
中介备忘观察行,
状态策略模板见。
访问者真独特,
并发型,线程池,
读写锁,生产消。
逐行解析:
第一行:创建型,工厂多,
- 工厂模式 (Factory Method):创建型模式中的一个代表,工厂模式提供一个接口,用于创建对象,但由子类决定要实例化的具体类。这里提到的“工厂多”是指创建型模式中有几种常见的工厂类模式(例如工厂方法模式和抽象工厂模式)。
第二行:单例建对象,抽象工厂做。
- 单例模式 (Singleton):单例模式确保类只有一个实例,并提供全局访问点。用于限制某个类的实例化次数,通常用于日志类、数据库连接池等需要全局唯一的场景。
- 抽象工厂模式 (Abstract Factory):创建相关或依赖的对象,而无需指定具体类。常用于创建一系列相关产品的情况。例如,如果你有一组相互依赖的对象(如操作系统相关的按钮、窗口等),抽象工厂可以提供不同的工厂来创建这些相关对象。
第三行:建造者分步做,原型克隆最不愁。
- 建造者模式 (Builder):建造者模式允许通过一步步的构造过程,创建一个复杂的对象。通常是通过提供多个参数来构造对象,而不暴露对象的具体构建过程。
- 原型模式 (Prototype):原型模式通过克隆现有对象来创建新对象。通过复制原始对象,可以轻松地生成新的对象,而不需要重新构造。适用于复杂对象或对象创建开销较大的场景。
第四行:结构型,适配器,
- 适配器模式 (Adapter):结构型模式中的一个代表,适配器模式用于将一个类的接口转换成客户端所期待的另一个接口。简单来说,适配器“包装”一个类的功能,使其能够与其他不兼容的类一起工作。例如,你的系统可能使用 A 类的接口,而第三方库提供的是 B 类接口,适配器模式就可以帮助你将 B 类接口适配成 A 类接口,避免直接修改第三方代码。
第五行:桥接组合都不错,
- 桥接模式 (Bridge):结构型模式中的一个模式,桥接模式用于将抽象和实现分离,使得两者可以独立变化。举个例子,如果你有多个操作系统和多个应用程序,桥接模式可以将操作系统和应用程序分开实现,从而使得操作系统和应用程序可以独立变化。
- 组合模式 (Composite):组合模式用于处理树形结构的对象,将对象组合成树形结构,使得客户端能够以统一的方式对待单个对象和对象集合。比如文件夹和文件的管理,文件夹和文件可以看作是树形结构,文件夹是一个“组合”,而文件是“叶子”。
第六行:装饰外观飞享元,代理再添一把火。
- 装饰器模式 (Decorator):结构型模式,装饰器模式通过动态地为对象添加额外的功能,不需要修改对象的代码。这是通过创建装饰器类来实现的,装饰器类会包含与原类相同的接口,并在原类的基础上添加新功能。
- 外观模式 (Facade):外观模式提供一个统一的接口来简化系统的使用,让客户端与复杂的子系统交互时,只需通过一个简单的接口即可。外观模式隐藏了复杂的子系统的内部实现。
- 享元模式 (Flyweight):享元模式通过共享相同的对象来减少内存使用,特别适用于大量相似对象的场景。享元模式可以共享内存占用相同的对象,而不必为每个对象创建新的实例。
- 代理模式 (Proxy):代理模式通过为对象提供代理来控制对其的访问,代理类通常会拦截客户端对目标对象的请求,可以用来添加额外的功能或做权限控制等。例如,虚拟代理用于延迟加载对象,远程代理用于处理网络通信等。
第七行:行为型,责任链,
- 责任链模式 (Chain of Responsibility):行为型模式之一,责任链模式通过将请求沿着一条链传递下去,每个对象都有机会处理请求。链中的每个处理对象都可以选择是否处理请求,或者将请求传递给下一个处理对象。常用于事件处理、日志系统等。
第八行:命令解释迭代先。
- 命令模式 (Command):行为型模式之一,命令模式将请求封装成对象,从而能够传递、记录、撤销请求。命令对象通常包含一个执行命令的方法,允许用户将命令排队、撤销或重做。
- 解释器模式 (Interpreter):行为型模式之一,解释器模式用于定义一个语言的文法,并提供一个解释器来解释给定的语句。通常用于构建表达式解析器等场景。
- 迭代器模式 (Iterator):行为型模式之一,迭代器模式用于提供一种访问集合元素的方法,而不暴露集合的内部结构。它允许你使用统一的方式遍历不同类型的集合。
第九行:中介备忘观察行,
- 中介者模式 (Mediator):行为型模式之一,中介者模式通过一个中介对象来协调不同对象之间的通信,减少对象之间的耦合。在复杂的系统中,可以使用中介者模式来简化不同模块之间的交互。
- 备忘录模式 (Memento):行为型模式之一,备忘录模式用于在不暴露对象内部结构的情况下保存和恢复对象的状态。常用于实现撤销操作或状态回滚。
- 观察者模式 (Observer):行为型模式之一,观察者模式用于定义一种一对多的依赖关系,当一个对象的状态改变时,所有依赖的对象都会收到通知。典型的例子是 GUI 编程中的事件监听。
第十行:状态策略模板见。
- 状态模式 (State):行为型模式之一,状态模式允许对象在其内部状态改变时改变其行为。通常通过将状态行为封装成状态类,使得不同状态下的行为不需要修改对象的代码。
- 策略模式 (Strategy):行为型模式之一,策略模式定义一系列算法,并将每一个算法封装起来,使得它们可以互换。策略模式常用于需要根据不同情况选择不同算法的场景,比如排序、支付方式选择等。
- 模板方法模式 (Template Method):行为型模式之一,模板方法模式定义一个算法的骨架,允许子类实现某些步骤。模板方法模式通常用于步骤固定、部分可变的算法。
第十一行:访问者真独特,
- 访问者模式 (Visitor):行为型模式之一,访问者模式用于将操作与对象结构分离,使得可以在不修改对象结构的前提下,新增操作。访问者模式通常用于需要对一组对象执行不同操作的场景,比如编译器中的语法树遍历。
第十二行:并发型,线程池,
- 线程池模式 (Thread Pool):并发型模式之一,线程池模式通过管理一组预先创建的线程,避免频繁创建和销毁线程的开销。线程池可以有效地提高多线程程序的性能,减少资源消耗。
第十三行:读写锁,生产消,
- 读写锁模式 (Read-Write Lock):并发型模式之一,读写锁模式允许多个线程同时读共享资源,但写线程必须独占资源。读写锁模式通常用于资源共享较多、写操作较少的场景。
- 生产者消费者模式 (Producer-Consumer):并发型模式之一,生产者消费者模式通过使用缓冲区来协调生产者线程和消费者线程,确保它们之间的同步和协作。生产者负责生成数据,消费者负责处理数据。
相关文章:
编程设计模式助记顺口溜
1、顺口溜 创建型,工厂多,单例建对象,抽象工厂做。建造者分步做,原型克隆最不愁。 结构型,适配器,桥接组合都不错,装饰外观飞享元,代理再添一把火。 行为型,责任链&…...
java网络通信(三):TCP通信、实现客户端-服务端消息通信
目录 1、什么是 TCP协议? 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介:本文章主要是演示如何用java代码以及TCP协议实现网络通信,实…...
mybatis-plus 对于属性为null字段不更新
MyBatis-Plus 默认情况下会根据字段的值是否为 null 来决定是否生成对应的 UPDATE 语句。这是由 更新策略 决定的,默认的行为是 忽略 null 值,即如果字段值为 null,该字段将不会出现在 UPDATE 语句中。 默认行为分析 MyBatis-Plus 默认的 Fi…...
GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记
1 Overall GAGAvatar(Generalizable and Animatable Gaussian Avatar),一种面向单张图片驱动的可动画化头部头像重建的方法,解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性: 基于NeRF的方…...
《数据挖掘:概念、模型、方法与算法(第三版)》
嘿,数据挖掘的小伙伴们!今天我要给你们介绍一本超级实用的书——《数据挖掘:概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作,由该领域的知名专家编写,系统性地介绍了在高维数据空间中分析和提取大量…...
springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成
前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中,我们完成订单的挂单和取单功能,今天我们完成购物车关联服务人员,用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...
lua闭包Upvalue
闭包 lua任何函数都是闭包,闭包至少带1个upValue; CClosure是使用Lua提供的lua_pushcclosure这个C-Api加入到虚拟栈中的C函数,它是对LClosure的一种C模拟 如string.gmatch就是cclosure 定义: #define ClosureHeader \CommonH…...
下载maven 3.6.3并校验文件做md5或SHA512校验
一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接: 二进制压缩包(推荐): ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…...
深入探索Flax:一个用于构建神经网络的灵活和高效库
深入探索Flax:一个用于构建神经网络的灵活和高效库 在深度学习领域,TensorFlow 和 PyTorch 作为主流的框架,已被广泛使用。不过,Flax 作为一个较新的库,近年来得到了越来越多的关注。Flax 是一个由Google Research团队…...
vue项目中单独文件的js不存在this.$store?.state怎么办
在Vue项目中,如果你在单独的文件(比如插件、工具函数等)中遇到this.$store不存在的情况,这通常是因为this上下文不指向Vue实例,或者Vuex store没有被正确地注入到Vue实例中。以下是几种可能的解决方案: 确保…...
物联网客户端在线服务中心(客服功能/私聊/群聊/下发指令等功能)
一、界面 私聊功能(下发通知类,一对多)群聊(点对点)发送指令(配合使用客户端,基于cefsharp做的物联网浏览器客户端)修改远程参数配置(直接保存到本地)&#…...
AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(二)
接上一篇AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(一) new_email 无论为什么文本,识别结果几乎都是垃圾邮件,因此我们需要对源码的逻辑进行梳理一下: 在代码中,new_email 无论赋值为何内容都被识别为…...
hint: Updates were rejected because the tip of your current branch is behind!
问题 本地仓库往远段仓库推代码时候提示: error: failed to push some refs to 192.168.2.1:java-base/java-cloud.git hint: Updates were rejected because the tip of your current branch is behind! refs/heads/master:refs/heads/master [rejected] (…...
Vue的数据驱动原理
文章目录 什么是数据驱动那么vuejs是如何实现这种数据驱动的呢?对getter/setter的理解?一个简单的演示例子vue数据驱动原理是:采用数据劫持结合发布者和订阅者模式,通过“object.defineproperty()”来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应…...
【Db First】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列【数据事务…...
数据分析-52-时间序列分解之变分模态分解VMD
文章目录 1 时间序列模态分解1.1 模态分解的概念1.2 模态分解的作用1.3 常用的模态分解方法1.4 模态分解的常用库2 变分模态分解VMD2.1 VMD的流程2.2 加载数据集2.2.1 数据重采样2.2.2 原始数据可视化2.3 VMD变分模态分解3 参考附录1 时间序列模态分解 1.1 模态分解的概念 时…...
做异端中的异端 -- Emacs裸奔之路4: 你不需要IDE
确切地说,你不需要在IDE里面编写或者阅读代码。 IDE用于Render资源文件比较合适,但处理文本,并不划算。 这的文本文件,包括源代码,配置文件,文档等非二进制文件。 先说说IDE带的便利: 函数或者变量的自动…...
redhat 7.9配置阿里云yum源
1、mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2、添加dns vim/etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 114.114.114.114 #配置完先检查下通不通 3、vi /etc/yum/pluginconf.d/subscription-manager.conf # 将 “enabled1” 改为 “ena…...
简单快速的上手python
前言 python是一门可以快速上手的语言,原因是它语法简单,api容易使用自由灵活 当我们需要安装任何的三方库时,只需要执行 pip install XX 之后在代码里面import xxx就可以使用python啦。 并且python的代码自由灵活,使用缩进区…...
PHP和GD如何给图片添加模糊边缘效果
在PHP中,使用GD库给图片添加模糊边缘效果通常涉及几个步骤,包括加载图片、创建模糊效果、应用边缘处理以及保存结果图片。然而,GD库本身并不直接提供边缘模糊的函数,但你可以通过一些技巧来实现类似的效果。 以下是一个简化的步骤…...
PowerShell:查找并关闭打开的文件
Get-SmbOpenFile 打开 Windows PowerShell 并运行 Get-SmbOpenFile | Format-List 若要仅显示特定文件共享的连接,请使用 Where-Object 运行 Get-SmbOpenFile。 Get-SmbOpenFile | Where-Object Path -eq "C:\Data\" | Format-List Get-SmbSession 显…...
SQL进阶技巧:非等值连接--单向近距离匹配
目录 0 场景描述 1 数据准备 2 问题分析 编辑 编辑 3 小结 数字化建设通关指南 0 场景描述 表 t_1 和表 t_2 通过 a 和 b 关联时,有相等的取相等的值匹配,不相等时每一 个 a 的值在 b 中找差值最小的来匹。 表 t_1:a 中无重复值 表 t_1:a 中无重复值 a 1 2 4 …...
【golang】单元测试,以及出现undefined时的解决方案
单元测试 要对某一方法进行测试时,例如如下这一简单减法函数,选中函数名后右键->转到->测试 1)Empty test file 就是一个空文件,我们可以自己写测试的逻辑 但是直接点绿色箭头运行会出问题: 找不到包。我们要在…...
代理IP地址的含义与设置指南
在数字化时代,互联网已经成为我们日常生活不可或缺的一部分。然而,在享受互联网带来的便利的同时,我们也面临着隐私泄露、访问限制等问题。代理IP地址作为一种有效的网络工具,能够帮助我们解决这些问题。本文将详细介绍代理IP地址…...
Qt 2D绘图之三:绘制文字、路径、图像、复合模式
参考文章链接: Qt 2D绘图之三:绘制文字、路径、图像、复合模式 绘制文字 除了绘制图形以外,还可以使用QPainter::darwText()函数来绘制文字,也可以使用QPainter::setFont()设置文字所使用的字体,使用QPainter::fontInfo()函数可以获取字体的信息,它返回QFontInfo类对象…...
el-table 纵向 横向 多级表头
<el-table :data"tableData" class"diaTable":span-method"handleSpanMethod"border:header-cell-style"{background:#292929,color:#fff}"><!-- 纵向表头 --><el-table-column label"纵向表头" width"…...
linux perf安装问题解决
WARNING: perf not found for kernel 4.15.0-39 perf安装问题 perf是一个功能强大的linux性能分析工具,其功能依赖于内核,安装perf工具的版本必须与内核版本保持一致。 perf安装问题 使用apt 安装 perf包,运行时提示要安装与内核版本相一致…...
嵌入式Linux无窗口系统下搭建 Qt 开发环境
嵌入式Linux无窗口系统下搭建 Qt 开发环境 本文将介绍如何在树莓派的嵌入式 Linux 环境下,搭建 Qt 开发环境,实现无窗口系统模式(framebuffer)下的图形程序开发。 1. 安装 Qt 环境 接下来,安装核心 Qt 开发库以及与 …...
JSON vs 表单格式:两种常见请求格式的区别与应用
搞iOS UI 自动化的同时涉及到了给后端发送请求,请求数据的格式常用的有json格式和表单格式,这两种格式如何区分,如何使用,特此总结了一下。 表单格式(Form Data) 传统的 HTML 表单使用的请求体格式&#…...
通过torch.utils.data.DataLoader可提高深度学习的10倍运行的速度?
引言 在深度学习的训练过程中,数据加载是一个关键步骤,它直接影响到模型训练的效率。为了提高运行速度,我们通常会采用多种方法,比如数据预处理、多线程加载、缓存策略等。然而,有一个经常被忽视的优化点——调整torc…...
【QT】背景,安装和介绍
TOC 目录 背景 GUI技术 QT的安装 使用流程 QT程序介绍 main.cpp编辑 Wiget.h Widget.cpp form file .pro文件 临时文件 C作为一门比较古老的语言,在人们的认知里始终是以底层,复杂和高性能著称,所以在很多高性能需求的场景之下…...
计算机网络:IP协议详细讲解
目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前,我们学习了传输层中的TCP和UDP,重点是TCP协议,他帮我们解决具体到主机的哪个应用(端口)、传输的可靠(序列号、校验和…...
Python中使用pip换源的详细指南
在Python开发过程中,我们经常需要安装各种第三方库。pip是Python的包管理工具,用于安装和管理Python库。然而,由于网络原因,有时访问默认的Python包索引(PyPI)可能会比较慢。这时,我们可以通过更…...
【Unity】WebGL全屏问题
1 前言 WebGL项目打包时不可避免的需要面对全屏化问题,或者说是占满网页的问题。这里讨论一下此问题。 2 全屏化 2.1 打包模板 WebGL在打包时可以选择不同的打包模板,其会影响最终打包好的项目在网页中的展现形式。可以在“Project Setting/Player/Set…...
基于大数据python 电商数据分析及推荐可视化系统(源码+LW+部署讲解+数据库+ppt)
!!!!!!!!! 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度(部分学校只有一次答辩机会 没弄好就延迟…...
基于大数据python 热门微博数据分析可视化系统(源码+LW+部署讲解+数据库+ppt)
!!!!!!!!! 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度(部分学校只有一次答辩机会 没弄好就延迟…...
MATLAB R2024b软件下载安装教程
软件版本: MATLAB R2024b 软件大小:24G 安装环境:Windows 10/11(64位) 界面语言:简体中文 软件下载:https://pan.xunlei.com/s/VOCut9-UJcX7k3AO7IGXobAiA1?pwdkqkr# 软件参考安装教程 1、使用网盘…...
机器学习算法(六)---逻辑回归
常见的十大机器学习算法: 机器学习算法(一)—决策树 机器学习算法(二)—支持向量机SVM 机器学习算法(三)—K近邻 机器学习算法(四)—集成算法 机器学习算法(五…...
Pareidoscope - 语言结构关联工具
文章目录 关于 Pareidoscope安装使用方法输入格式语料库查询 将语料库转换为 SQLite3 数据库两种语言结构之间的关联简单词素分析关联共现和伴随词素分析相关的更大结构可视化关联结构 关于 Pareidoscope Pareidoscope 是一组 用于确定任意语言结构之间 关联的工具,…...
Java中 HttpURLConnection 和 HttpClient 详解(初学者友好)
Java中HttpURLConnection和HttpClient详解(初学者友好) 在Java开发中,向服务器发送HTTP请求是常见的需求,比如调用API接口或获取远程数据。在JDK中,主要有两种方式实现HTTP通信: 使用 HttpURLConnection&…...
vulnhub-LUPINONE-靶场复盘-题解
靶机的下载连接https://download.vulnhub.com./empire/01-Empire-Lupin-One.zip 下载镜像后解压,然后导入到vmware中,使用的是nat模式 kali的ip地址:10.10.1.128 靶机ip地址:10.10.1.135 1.扫描靶机ip地址 命令:n…...
diff算法
vue的diff算法详解 vue: diff 算法是一种通过同层的树节点进行比较的高效算法 其有两个特点: 比较只会在同层级进行, 不会跨层级比较 在diff比较的过程中,循环从两边向中间比较 diff 算法在很多场景下都有应用,在 vue 中&…...
通过异步使用消息队列优化秒杀
通过异步使用消息队列优化秒杀 同步秒杀流程异步优化秒杀异步秒杀流程基于lua脚本保证Redis操作原子性代码实现阻塞队列的缺点 同步秒杀流程 public Result seckillVoucher(Long voucherId) throws InterruptedException {SeckillVoucher seckillVoucher iSeckillVoucherServi…...
项目整合logback日志打印线程id
项目打印日志能帮助我们解决很多的问题,提示我们出现的问题,通过日志我们可以准确的定位问题快速找到问题点解决问题。 <?xml version"1.0" encoding"UTF-8"?> <!-- 日志级别从低到高分为TRACE < DEBUG < INFO &l…...
WEB开发: 丢掉包袱,拥抱ASP.NET CORE!
今天的 Web 开发可以说进入了一个全新的时代,前后端分离、云原生、微服务等等一系列现代技术架构应运而生。在这个背景下,作为开发者,你一定希望找到一个高效、灵活、易于扩展且具有良好性能的框架。那么,ASP.NET Core 显然是一个…...
爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析
本专栏会对爬虫进行从0开始的讲解,每一步都十分的细致,如果你感兴趣希望多多点赞收藏关注支持 简介:文章对爬虫展开多方面剖析。起始于爬虫的基本概念,即依特定规则在网络抓取信息的程序或脚本,在搜索引擎信息提取上作…...
SpringBoot3 + Vue3 由浅入深的交互 基础交互教学2
目录 一、这篇文章是基础交互教学系列的续作 二、发送请求时,携带发送的数据json格式的参数:data 三、携带token请求头,进行JWT校验 四、实现throw抛出异常,并交互显示在前端的界面 一、这篇文章是基础交互教学系列的续作 大…...
PID模糊控制算法(附MATLAB仿真程序)
一、基本原理 PID模糊控制算法是一种将传统PID控制与模糊逻辑相结合的控制策略。它利用模糊逻辑处理不确定性和非线性问题的能力,以提高控制系统的性能。以下是PID模糊控制算法的基本原理: 1.1. **误差和误差变化率的计算**: - 首先&…...
云轴科技ZStack助力 “上科大智慧校园信创云平台”入选上海市2024年优秀信创解决方案
近日,为激发创新活⼒,促进信创⾏业⾼质量发展,由上海市经济信息化委会同上海市委网信办、上海市密码管理局、上海市国资委等主办的“2024年上海市优秀信创解决方案”征集遴选活动圆满落幕。云轴科技ZStack支持的“上科大智慧校园信创云平台”…...
分布式集群下如何做到唯一序列号
优质博文:IT-BLOG-CN 分布式架构下,生成唯一序列号是设计系统常常会遇到的一个问题。例如,数据库使用分库分表的时候,当分成若干个sharding表后,如何能够快速拿到一个唯一序列号,是经常遇到的问题。实现思…...