设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析
单例模式(Singleton Pattern),又称生成器模式,是一种对象构建模式。它主要用于构建复杂对象,通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将一个复杂对象的构建过程分解为多个简单的步骤,并允许用户通过指定复杂对象的类型和内容来构建它们,而无需知道对象内部的具体构建细节。
一、核心思想
建造者模式的核心思想是将复杂对象的构建过程与它的表示分离,使得构建过程可以灵活地组合,而不会影响最终的产品表示。这有助于创建一个逐步构建的复杂对象,同时隐藏其内部构造细节。
二、定义与结构
- 定义:建造者模式是一种创建型设计模式,它允许将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。通过将对象的构建过程分解为一系列步骤,由不同的建造者类来实现这些步骤,最后由指挥者类来统筹构建流程,以得到最终的复杂对象。
- 结构:
- 产品(Product):即要构建的复杂对象,它具有多个组成部分,这些部分通常由建造者逐步构建完成。例如上述的定制电脑,它就是产品,包含 CPU、内存等各种硬件组件作为其内部属性。
- 抽象建造者(Abstract Builder):定义了构建产品各个部分以及返回最终产品的抽象方法,为具体建造者提供统一的接口规范。比如定义了安装 CPU、安装内存等抽象操作方法。
- 具体建造者(Concrete Builder):实现抽象建造者接口,负责按照特定的需求实际构建产品的各个部分,并在最后返回构建完成的产品。例如,高性能电脑建造者会选择高端的 CPU、大容量内存来组装电脑。
- 指挥者(Director):负责指挥和协调建造者的构建步骤,它知晓构建产品所需的完整流程,通过调用建造者的方法来实现产品的构建,但它并不负责具体的构建细节,只是掌控构建的节奏。比如指挥者决定先安装哪个部件,后安装哪个部件。
角色
- 产品角色(Product):作为建造的目标对象,它承载了复杂对象的所有属性和状态,是建造者们努力打造的成果,通常是一个包含多个成员变量的类,这些变量代表了对象的不同组成部分。
- 抽象建造者角色(Abstract Builder):作为建造者的抽象模板,规定了构建产品必须实现的一组抽象方法,这些方法涵盖了从基础部件安装到最终产品组装成型的各个环节,为具体建造者的实现提供了方向指引。
- 具体建造者角色(Concrete Builder):依据抽象建造者的蓝图,深入到实际构建工作的第一线,根据特定的设计要求或用户需求,精心挑选合适的部件,运用专业的技术,将一个个零散的部件逐步组装成完整的产品,并且能够将最终成果交付给客户端。
- 指挥者角色(Director):站在更高的层面统筹规划,它熟悉整个构建流程的最优顺序,通过向具体建造者下达精准的指令,协调各个建造者之间的工作衔接,确保复杂对象能够高效、有序地构建完成,虽然不直接参与物理构建,但却掌控着构建的全局节奏。
三、实现步骤及代码示例(以构建一个网页表单为例)
1、定义产品
// 产品:网页表单
public class WebForm {private String formTitle;private String formFields;private String submitButtonText;public WebForm(String formTitle, String formFields, String submitButtonText) {this.formTitle = formTitle;this.formFields = formFields;this.submitButtonText = submitButtonText;}// 省略 getters 和 setters,方便展示主要逻辑@Overridepublic String toString() {return "WebForm{" +"formTitle='" + formTitle + '\'' +"formFields='" + formFields + '\'' +"submitButtonText='" + submitButtonText + '\'' +'}';}
}
2、定义抽象建造者
// 抽象建造者:网页表单建造者
public abstract class WebFormBuilder {protected WebForm webForm;public WebForm getWebForm() {return webForm;}public abstract void buildFormTitle();public abstract void buildFormFields();public abstract void buildSubmitButtonText();
}
3、创建具体建造者
// 具体建造者:登录表单建造者
public class LoginFormBuilder extends WebFormBuilder {@Overridepublic void buildFormTitle() {webForm = new WebForm("Login Form", "", "");}@Overridepublic void buildFormFields() {webForm.setFormFields("Username: <input type='text' name='username'><br>Password: <input type='password' name='password'>");}@Overridepublic void buildSubmitButtonText() {webForm.setSubmitButtonText("Login");}
}// 具体建造者:注册表单建造者
public class RegistrationFormBuilder extends WebFormBuilder {@Overridepublic void buildFormTitle() {webForm = new WebForm("Registration Form", "", "");}@Overridepublic void buildFormFields() {webForm.setFormFields("Username: <input type='text' name='username'><br>Password: <input type='password' name='password'><br>Email: <input type='email' name='email'>");}@Overridepublic void buildSubmitButtonText() {webForm.setSubmitButtonText("Register");}
}
4、再定义指挥者:
// 指挥者:表单指挥者
public class FormDirector {private WebFormBuilder webFormBuilder;public FormDirector(WebFormBuilder webFormBuilder) {this.webFormBuilder = webFormBuilder;}public WebForm construct() {webFormBuilder.buildFormTitle();webFormBuilder.buildFormFields();webFormBuilder.buildSubmitButtonText();return webFormBuilder.getWebForm();}
}
5、在客户端代码中使用
public class Main {public static void main(String[] args) {// 构建登录表单LoginFormBuilder loginFormBuilder = new LoginFormBuilder();FormDirector formDirector = new FormDirector(loginFormBuilder);WebForm loginForm = formDirector.construct();System.out.println(loginForm);// 构建注册表单RegistrationFormBuilder registrationFormBuilder = new RegistrationFormBuilder();formDirector = new FormDirector(registrationFormBuilder);WebForm registrationForm = formDirector.construct();System.out.println(registrationForm);}
}
四、常见技术框架应用
建造者模式(Builder Pattern)是一种创建型设计模式,它通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式的优点在于能够分步骤构建复杂对象,而无需关注这些部分的具体组装过程,从而提高了代码的灵活性和可扩展性。关于建造者模式在技术框架中的应用,虽然具体的应用场景可能因框架而异,但以下是一些常见的技术框架和领域中建造者模式的应用示例:
1、Java EE和Spring框架
在Java EE和Spring等企业级应用框架中,建造者模式常用于构建具有复杂属性和依赖关系的对象。例如,在构建数据库连接池、消息队列连接等复杂对象时,可以使用建造者模式来逐步设置对象的属性,并最终返回一个配置好的实例。
2、Web开发框架
在Web开发中,建造者模式常用于构建HTTP请求和响应对象。这些对象通常包含多个属性和配置选项,如URL、请求方法、头信息、请求体等。通过建造者模式,可以逐步设置这些属性,而不是在构造函数中一次性传递所有参数。
3、图形用户界面(GUI)框架
在构建复杂的GUI组件时,如窗口、按钮、文本框等,建造者模式可以帮助开发者逐步设置组件的属性,如大小、位置、颜色等。这样不仅可以提高代码的可读性,还可以使组件的创建过程更加灵活和可扩展。
4、游戏开发框架
在游戏开发中,建造者模式常用于构建游戏中的角色、道具、场景等复杂对象。通过建造者模式,可以逐步设置这些对象的属性,如生命值、攻击力、防御力等,并最终生成一个完整的游戏对象。
5、配置和初始化框架
在一些配置和初始化框架中,建造者模式常用于构建配置对象。这些配置对象通常包含多个配置项和依赖关系,通过建造者模式可以逐步设置这些配置项,并最终生成一个配置好的实例。
在 Android 开发中,AlertDialog
的创建就运用了类似建造者模式的思想。
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;public class DialogBuilderExample {public static void main(String[] args) {Context context = null; // 实际开发中需替换为有效的上下文AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle("提示").setMessage("这是一个示例对话框").setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 点击确定按钮的处理逻辑}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@@Overridepublic void onClick(DialogInterface dialog, int which) {// 点击取消按钮的处理逻辑}});AlertDialog dialog = builder.create();dialog.show();}
}
这里,AlertDialog.Builder
相当于具体建造者,它逐步构建 AlertDialog
(产品)的各个部分,如标题、消息内容、按钮等,而我们不需要关心 AlertDialog
内部复杂的创建和初始化过程,只需按照需求配置各个部件即可,最后通过 create
方法得到完整的对话框并展示。
五、应用场景
- 复杂对象构建:当需要创建的对象具有大量的属性、复杂的初始化逻辑,并且不同的属性组合会产生不同的功能或外观变体时,建造者模式非常适用。比如构建一辆汽车,涉及发动机、底盘、车身、内饰等多个复杂部件的选型与组装,使用建造者模式可以清晰地划分构建步骤,方便管理。
- 对象构建过程需要精细控制:如果对对象构建的顺序、步骤有严格要求,建造者模式能确保构建过程按照预定的流程进行。例如在建筑施工中,先打地基、再建主体、最后装修,通过指挥者精确安排建造者的工作顺序,保证建筑质量。
- 创建对象的逻辑频繁变化:当创建对象的逻辑需要经常调整,比如根据不同的市场需求,产品的配置、样式经常改变,建造者模式将构建逻辑封装在建造者和指挥者类中,修改时只需在相关类中进行,不影响客户端使用。
六、优缺点
优点:
- 构建过程与表示分离:使得客户端不需要了解复杂对象的具体构建细节,降低了耦合度,客户端只需与指挥者和建造者的抽象接口交互,即使构建过程变化,也不影响客户端代码。
- 精细控制构建过程:通过指挥者可以精确安排构建步骤,满足不同的构建需求,确保复杂对象按照预期的方式构建,提高构建质量。
- 代码复用性高:抽象建造者和具体建造者类可以在多个地方复用,尤其是当有多种类似的复杂对象需要构建时,复用建造者类能节省开发时间。例如,不同风格的房屋建造可以复用基础的建造者类。
- 便于维护和扩展:当需要增加新的构建步骤、修改构建逻辑或创建新的复杂对象变体时,只需在建造者和指挥者类中操作,不会影响其他部分代码。如要给汽车增加自动驾驶功能模块,只需在相关建造者类中添加构建步骤。
缺点:
- 增加代码复杂性:引入建造者模式会增加类的数量,包括抽象建造者、具体建造者、指挥者以及产品类,对于简单的对象创建场景,会使代码显得过于繁琐。
- 对开发人员要求较高:要求开发人员熟悉建造者模式的结构和原理,在设计和实现过程中需要合理规划各个角色的职责和交互,否则容易导致代码混乱,增加维护难度。
建造者模式为创建复杂对象提供了一种高效、灵活且易于维护的解决方案,虽然在简单场景下可能略显繁琐,但在应对复杂构建需求时能充分发挥其优势,提升软件的质量和开发效率。
相关文章:
设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析
单例模式(Singleton Pattern),又称生成器模式,是一种对象构建模式。它主要用于构建复杂对象,通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将…...
cJson—json和XML比较
cJson—json和XML比较 前言1. 数据结构与表达能力2. 效率(性能)3. 存储占用与传输效率4. 开发难易程度5. 跨平台支持与兼容性6. 灵活性与扩展性7. 错误处理与验证**总结:JSON 与 XML 的优缺点对比选择建议 前言 在嵌入式设备开发中ÿ…...
【项目】智能BI洞察引擎 测试报告
目录 一、项目背景BI介绍问题分析项目背景 二、项目功能三、功能测试1、登录测试测试用例测试结果 2、注册测试测试用例测试结果出现的bug 3、上传文件测试测试用例测试结果 4、AI生成图表测试测试用例测试结果 5、分析数据页面测试(异步)测试用例测试结…...
基于SpringBoot的野生动物保护发展平台的设计与实现(源码+SQL+LW+部署讲解)
文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...
QEMU网络配置简介
本文简单介绍下qemu虚拟机网络的几种配置方式。 通过QEMU的支持,常见的可以实现以下4种网络形式: 基于网桥(bridge)的虚拟网络。基于NAT(Network Addresss Translation)的虚拟网络。QEMU内置的用户模式网…...
wps透视数据表
1、操作 首先选中你要的行字段表格 -> 插入 -> 透视数据表 -> 拖动行值(部门)到下方,拖动值(包裹数量、运费)到下方 2、删除 选中整个透视数据表 -> delete 如图:...
Modbus知识详解
Modbus知识详解 ## 1.什么是Modbus?**顾名思义**,它是一个Bus(总线),即总线协议。比如串口协议、IIC协议、SPI都是通信协议。你接触到这种协议,相信你所处的行业是工业电子方面或者你的产品用于工业。好了,…...
c++字节对齐
字节对齐(Byte Alignment)是指计算机存储器中数据存放的位置必须满足特定的地址要求,以提高内存访问效率。在许多计算机系统中,处理器在读取内存中的数据时,需要按照特定的边界进行访问,这种边界通常是2的幂…...
javaEE-文件内容的读写
目录 一.数据流 1.字节流 InputStream的方法: cloes() read() OutPutStream writer()方法 2.字符流 Reader: writer: 代码练习1: 代码练习2: 代码练习3: 一.数据流 java标准库对数据进行了封装,提供了一组类负责进行这些工作. 数据流分为两类:字节流和…...
SWM221系列芯片之电机应用及控制
经过对SWM221系列的强大性能及外设资源,TFTLCD彩屏显示及控制进行了整体介绍后,新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下,SWM221系列芯片以其卓越性能与创新设计,受…...
Mongodb日志报错too many open files,导致mongod进程down
【解决方案】 (1)进入到服务器,执行: ulimit -a 查看:open files这一行的数量,如果查询到的结果是1000左右,那多半是服务器限制。 (2)在当前session窗口执行如下&…...
在 uni-app 中使用 wxml-to-canvas 的踩坑经验总结
在 uni-app 中使用 wxml-to-canvas 的踩坑经验总结 wxml-to-canvas 是一款非常强大的小程序工具,可以将 WXML 转换为 Canvas 绘图,用于生成海报、分享图片等。将其应用于 uni-app 项目中,可以为多端开发带来极大的便利,但也有一些…...
基本算法——回归
目录 创建工程 加载数据 分析属性 创建与评估回归模型 线性回归 回归树 评估 完整代码 结论 本节将通过分析能源效率数据集(Tsanas和Xifara,2012)学习基本的回归算法。我们将基 于建筑的结构特点(比如表面、墙体与屋顶面…...
NestJS 性能优化:从应用到部署的最佳实践
在上一篇文章中,我们介绍了 NestJS 的微服务架构实现。本文将深入探讨 NestJS 应用的性能优化策略,从应用层到部署层面提供全方位的优化指南。 应用层优化 1. 路由优化 // src/modules/users/users.controller.ts import { Controller, Get, UseInter…...
VuePress搭建个人博客
VuePress搭建个人博客 官网地址: https://v2.vuepress.vuejs.org/zh/ 相关链接: https://theme-hope.vuejs.press/zh/get-started/ 快速上手 pnpm create vuepress vuepress-starter# 选择简体中文、pnpm等, 具体如下 .../19347d7670a-1fd8 | 69 .../19…...
在AWS Lambda上部署Python应用:从入门到实战
在AWS Lambda上部署Python应用:从入门到实战 随着云计算和无服务器架构(Serverless Architecture)在业界的普及,AWS Lambda成为了一个强有力的工具。它让开发者可以部署代码而无需管理服务器,按需运行,按时间计费。AWS Lambda支持多种语言,其中Python作为一门高效、简洁…...
初学STM32 ---高级定时器互补输出带死区控制
互补输出,还带死区控制,什么意思? 带死区控制的互补输出应用之H桥 捕获/比较通道的输出部分(通道1至3) 死区时间计算 举个栗子(F1为例):DTG[7:0]250,250即二进制&#x…...
chatwoot 开源客服系统搭建
1. 准备开源客服系统(我是用的Chatwoot ) 可以选择以下开源客服系统作为基础: Chatwoot: 开源,多语言,跟踪和分析,支持多渠道客户对接,自动化和工作流等。源码Zammad: 现代的开源工单系统。Fr…...
Ungoogled Chromium127编译指南 Linux篇 - 安装Docker(六)
1. 引言 在了解了Docker的重要性后,我们需要在系统中正确安装和配置Docker环境。Docker的安装过程看似简单,但要确保其能够完美支持Ungoogled Chromium的编译,还需要进行一些特殊的配置。本文将详细介绍如何在Ubuntu系统上安装Docker&#x…...
试用ChatGPT的copilot编写一个程序从笔记本电脑获取语音输入和图像输入并调用开源大模型进行解析
借助copilot写代码和自己手写代码的开发过程是一样的。 首先要有明确的开发需求,开发需求越详细,copilot写出的代码才能越符合我们的预期。 其次,有了明确的需求,最好先做下需求拆解,特别是对于比较复杂的应用…...
Kafka 性能提升秘籍:涵盖配置、迁移与深度巡检的综合方案
文章目录 1.1.网络和io操作线程配置优化1.2.log数据文件刷盘策略1.3.日志保留策略配置1.4.replica复制配置1.5.配置jmx服务1.6.系统I/O参数优化1.6.1.网络性能优化1.6.2.常见痛点以及优化方案1.6.4.优化参数 1.7.版本升级1.8.数据迁移1.8.1.同集群broker之间迁移1.8.2.跨集群迁…...
2024年常用工具
作为本年度高频使用工具,手机端也好,桌面端也好,筛选出来9款产品,这里也分享给关注我的小伙伴 ,希望对你有些帮助,如果你更好的产品推荐,欢迎留言给我。 即刻 产品经理的聚集地,“让…...
在Linux系统中使用字符图案和VNC运行Qt Widgets程序
大部分服务器并没有GUI,运行的是基础的Linux系统,甚至是容器。如果我们需要在这些系统中运行带有GUI功能的Qt程序,一般情况下就会报错,比如: $ ./collidingmice qt.qpa.xcb: could not connect to display qt.qpa.plu…...
kafka使用常见问题
连接不上kafka,报下边的错 org.apache.kafka.common.KafkaException: Producer is closed forcefully.at org.apache.kafka.clients.producer.internals.RecordAccumulator.abortBatches(RecordAccumulator.java:760) [kafka-clients-3.0.2.jar:na]at org.apache.kafka.client…...
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
一、引入MockMvc依赖 使用MockMvc,必须要引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>二、具体演示…...
mysql_real_connect的概念和使用案例
mysql_real_connect 是 MySQL C API 中的一个函数,用于建立一个到 MySQL 数据库服务器的连接。这个函数尝试建立一个连接,并根据提供的参数进行连接设置。 概念 以下是 mysql_real_connect 函数的基本概念: 函数原型:MYSQL *my…...
单片机--51- RAM
1.概览某个51单片机对空间区域的划分: 2.RAM被分配的区域是256bytes, 通常8051单片机ram是128bytes 8052的ram是256bytes(其中高128位的地址和sfr区域地址重合,物理区域不同) extern uint32_t alarm_cnt_1; uint32…...
【机器学习】梯度下降
文章目录 1. 梯度下降概念2. 梯度下降的技巧2.1 动态设置学习率2.2 Adagrad调整梯度2.3 随机梯度下降(SGD)2.4 特征缩放 3. 梯度下降理论基础 1. 梯度下降概念 梯度:Loss 对参数在某一点的偏微分,函数沿梯度的方向具有最大的变化…...
攻防世界web第十题Web_python_template_injection
这是题目,从题目上看是一个python模板注入类型的题目。 首先测试是否存在模板注入漏洞,构造http://61.147.171.105:57423/{{config}} 得到 说明存在模板注入漏洞,继续注入 构造http://61.147.171.105:57423/{{‘’.class.mro}}: 得到 再构造…...
【《python爬虫入门教程11--重剑无峰168》】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找?-- 如果用edge也是类似的1.chrome…...
VUE echarts 教程二 折线堆叠图
VUE echarts 教程一 折线图 import * as echarts from echarts;var chartDom document.getElementById(main); var myChart echarts.init(chartDom); var option {title: {text: Stacked Line},tooltip: {trigger: axis},legend: {data: [Email, Union Ads, Video Ads, Dir…...
gitlab的搭建及使用
1、环境准备 服务器准备 CentOS Linux release 7.9.2009 (Core),内存至少4G。 修改主机名和配置ip地址 hostnamectl set-hostname <hostname> 关闭主机的防火墙 # 关闭防火墙 systemctl stop firewalld #临时关闭防火墙 systemctl disable firewalld …...
openEuler ARM使用vdbench50407
openEuler ARM 使用 vdbench50407 系统信息:openEuler 22.03 (LTS-SP4) Linux 5.10.0-216.0.0.115.oe2203sp4.aarch64 1. 软件包获取 vdbench src https://www.oracle.com/downloads/server-storage/vdbench-source-downloads.htmlvdbench bin https://www.oracle.…...
如何使用 JPA 实现分页查询并返回 VO 对象
JPA分页踩坑指南 1.原生sql查询返回vo类包含主键id,无法自动映射,需要用到投影ResultTransformer,所以我定义了一个投影工具类 JpaCommonService 2.异步调用原生查询方法的时候,需要用 NativeQuery<?> query entityMa…...
【SQL Server】教材数据库(1)
1 利用sql建立教材数据库,并定义以下基本表: 学生(学号,年龄,性别,系名) 教材(编号,书名,出版社编号,价格) 订购(学号…...
cmake学习_incomplete
文章目录 cmake使用举例cmake示例模板编译时库查找基础知识模块模式导入目标 交叉编译配置基础知识模板实际使用 使用实例链接库解决符号冲突 参考资料 老规矩,先放官方文档 如何构建从互联网下载的源代码包:User Interaction Guide 想使用第三方库的开发者:Using …...
过度与动画的区别?
过渡(Transition): 过渡效果是由元素的状态变化触发的,例如:当鼠标悬停在某个元素上、或当某个 CSS 属性值发生改变时。 必须指定起始状态和结束状态。过渡会在两者之间自动平滑过渡。 过渡的触发通常是用户交互或通过…...
tcpdump指南(1)
大家读完觉得有意义记得关注和点赞!!! tcpdump是一种在网络上转储流量的网络工具。 这篇文章服务器作为一些常用命令的指南。如需完整指南, 请参阅手册页,或在 Linux 计算机上。man tcpdump 1 基本选项 帮助摘要&#…...
Linux(Centos 7.6)网卡信息没有了问题处理
1.问题现象 虚拟机打开后,使用ifconfig查看IP信息,虚拟机默认的网卡名称是ens33,ifconfig没有看到相关问题,远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…...
基于SpringBoot的校园二手交易平台的设计与实现(源码+SQL+LW+部署讲解)
文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…...
springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本大学校园生活信息平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…...
week05_nlp大模型训练·词向量文本向量
1、词向量训练 1.1 CBOW(两边预测中间) 一、CBOW 基本概念 CBOW 是一种用于生成词向量的方法,属于神经网络语言模型的一种。其核心思想是根据上下文来预测中心词。在 CBOW 中,输入是目标词的上下文词汇,输出是该目标…...
FreeRTOS Lwip Socket APi TCP Server 1对多
源文件 /********************************************************************************* file lwip_tcp_driver.cpp* brief TCP Server implementation using LwIP******************************************************************************* at…...
SonarQube相关的maven配置及使用
一、maven 全局配置 <settings><pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>sonar</id><activation><activeByDefault>true</acti…...
【蓝桥杯选拔赛真题87】python输出字符串 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
目录 python输出字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python输出字符串 第十五届蓝桥杯青少年组python比赛选拔赛真题详细解析…...
嵌入式开发中的机器人表情绘制
机器人的表情有两种,一种是贴图,一钟是调用图形API自绘。 贴图效果相对比较好,在存储空间大的情况下是可以采用的。 自绘比较麻烦,但在资源和空缺少的情况下,也是很有用的。而且自绘很容易通过调整参数加入随机效果&…...
本机实现Llama 7B推理及部署
本机实现Llama 7B推理及部署 使用llamafile在Windows系统部署 部署步骤:首先从https://www.modelscope.cn/api/v1/models/bingal/llamafile-models/repo?Revision=master&FilePath=llamafile-0.6.2.win.zip下载llamafile并解压得到llamafile.exe文件, 再从https://www.…...
HarmonyOS NEXT 实战之元服务:静态案例效果---我的热门应用服务
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index import { authentica…...
二十三种设计模式-工厂方法模式
工厂方法模式是一种创建型设计模式,其核心思想是通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法模式将对象的实例化推迟到子类中进行,从而使得扩展变得容易,而不需要修改现有的代码,符合开闭原则&…...
硬件工程师面试题 21-30
把常见的硬件面试题进行总结,方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题,其中可能会题目类似,加强印象即可。 更多硬件面试题:硬件工程师面试题 1-10硬件工程师面试题 11-20 21、单片机最小系统需要什么&#x…...