当前位置: 首页 > news >正文

【未来编程:AI如何通过合成复用原则优化设计】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

  • 前言
  • 合成复用原则
    • 含义
  • 继承复用
    • 含义
    • UML图
    • 实现代码
    • 运行结果及分析
    • 优缺点
  • 合成复用(我有这个方法但是表现上是通过你去实现的)
    • 含义
    • UML图
    • 实现代码
    • 运行结果及解释
    • 合成复用的优点
  • 总结
    • 合成复用与继承复用:适用场景和优缺点
      • 合成复用
      • 适用场景
      • 优缺点
      • 继承复用
      • 适用场景
      • 优缺点

前言

  • 本文主要讲解合成复用原则为什么能替代继承复用原则

在这里插入图片描述

合成复用原则

含义

  • 合成复用原则(Composition over Inheritance)是一种设计思想,强调通过对象组合(合成)来实现复用,而不是通过继承。它的核心思想是,创建灵活的对象,并通过组合而不是继承来增强功能,避免了继承层次过深和过于紧耦合的问题。尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

  • 下面我们以鸭子实现飞和游泳行为来说明继承复用和组合复用的优缺点。

继承复用

含义

  • 继承复用(Inheritance Reuse)是通过继承父类来复用父类的功能和行为。

UML图

  • 我们知道在现实生活中,鸟会飞,鱼会游泳,鸭子不仅会飞也会游泳,但是在Java中如果要让鸭子实现这些行为,如果单靠继承是不可能的,因为Java只能单继承,一个类只能继承另一个类,如下类图中,如果鸭子要实现鸟飞的方式就要继承鸟类,但如果他还要实现游这个行为就需要调用游的接口去重写游泳的方法来实现。

在这里插入图片描述

实现代码

  • 行为的实现接口
package principles.composition_Reuse.before;public interface Flyable {void fly();
}
package principles.composition_Reuse.before;public interface Swmmable {void swim();
}
  • 实现的类
package principles.composition_Reuse.before;public class Fish {public void swim(){System.out.println("鱼在游");}
}
package principles.composition_Reuse.before;public class Bird implements Flyable{@Overridepublic void fly() {System.out.println("鸟在咻咻飞");}
}
package principles.composition_Reuse.before;public class Duck extends Bird implements Swmmable{@Overridepublic void swim() {System.out.println("鸭鸭在游泳");}//继承飞@Overridepublic void fly() {System.out.println("鸭鸭噗噗的飞啦");super.fly();//调用鸟的飞法}
}
  • 测试代码
package principles.composition_Reuse.before;public class Main {public static void main(String[] args) {Duck duck = new Duck();duck.fly();duck.swim();}
}

运行结果及分析

在这里插入图片描述

  • 根据运行结果及代码可以知道,我们的鸭鸭实现了游泳和飞的行为,因为它的飞是继承自鸟的,当我们用super.fly() 去调用s时能够展示继承并复用父类的行为。它能够让我们看到父类的实现仍然可以在子类中被调用,并且我们还能在重写方法里面对父类的行为进拓展,也就是说鸭鸭不仅可以噗噗的飞也可以像鸟一样咻咻的飞,如上运行结果所示那样。
  • 如果我们不需要父类的飞行方法,可以不调用 super.fly() 时,子类会完全覆盖父类的方法,这种情况下子类的方法独立于父类。

优缺点

  • 虽然继承复用简单,易实现的优点,但是他也存在以下缺点:
    • 1.继承破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的 ,也叫做“白箱复用”。例如,如果 Bird 类的 fly() 方法实现发生变化,Duck 类的行为也可能发生变化,这会给系统带来不必要的风险。
    • 2.子类与父类的耦合度高。父类实现的任何改变都会导致子类的实现发生改变,不利于类的扩展和维护。
    • 3.限制了复用的灵活性。比如,在代码中,Duck 类只能继承 Bird 类,无法动态决定是否继承其他类或选择不同的行为组合。如果我们希望 Duck 类可以灵活地选择不同的飞行和游泳实现,继承就显得不够灵活。相比之下,组合复用(如委托给接口或不同的类)能够在运行时根据需要灵活调整行为。
      • 下面我们将通过组合复用来实现鸭鸭的飞和游的行为。

合成复用(我有这个方法但是表现上是通过你去实现的)

含义

  • 合成复用原则(Composition):是指通过将现有类的功能组合在一起,而不是通过继承来实现复用。也就是说,类的功能并不直接通过继承而获得,而是通过将其他类的实例作为成员变量,将其方法委托给这些成员来实现复用。

UML图

在这里插入图片描述

  • 这幅图中 Duck 类实现了 Flyable 和 Swimmable 接口,并通过 合成复用的方式,将 Bird 类的飞行行为和 Fish 类的游泳行为组合进来。具体做法是:Duck 类在其构造器中通过依赖注入的方式接收 Flyable 和 Swimmable 对象(即 Bird 和 Fish),并将行为的实现委托给这些对象。

实现代码

  • 行为的实现接口
package principles.composition_Reuse.after;public interface Flyable {void fly();
}
package principles.composition_Reuse.after;public interface Swimmable {void swim();
}
  • 实现的类
package principles.composition_Reuse.after;// 具体行为实现
class Bird implements Flyable {public void fly() {System.out.println("Bird is flying");}
}
package principles.composition_Reuse.after;class Fish implements Swimmable {public void swim() {System.out.println("Fish is swimming");}
}
package principles.composition_Reuse.after;// Duck 类表示一个鸭子,它实现了飞行和游泳的行为。
// 通过合成复用的方式,Duck 类将飞行和游泳的行为委托给 Bird 和 Fish 类。
class Duck implements Flyable, Swimmable {private Flyable flyable;  // 用于保存飞行行为private Swimmable swimmable;  // 用于保存游泳行为// 构造器注入飞行和游泳的实现类public Duck(Flyable flyable, Swimmable swimmable) {this.flyable = flyable;this.swimmable = swimmable;}// 实现 Flyable 接口的 fly 方法,委托给 flyable 的 fly 方法// Duck 类不需要直接实现飞行的逻辑,只需要委托 Bird 类来执行飞行的具体操作。@Overridepublic void fly() {System.out.println("鸭鸭会飞其委托给了 ---> ");flyable.fly();  // 委托飞行行为的实现}@Overridepublic void swim() {System.out.println("鸭鸭会游其委托给了 ---> ");swimmable.swim();  // 委托游泳行为的实现}
}
  • 测试代码
package principles.composition_Reuse.after;// 测试代码
public class Main {public static void main(String[] args) {// 创建飞行和游泳的实现对象Flyable bird = new Bird();  // 让 Bird 实现飞行Swimmable fish = new Fish();  // 让 Fish 实现游泳// 创建 Duck 对象,将飞行和游泳行为组合Duck duck = new Duck(bird, fish);// 测试 duck 的行为duck.fly();   // 输出: Bird is flyingduck.swim();  // 输出: Fish is swimming}
}

运行结果及解释

在这里插入图片描述

  • 从运行结果我们可以看到鸭鸭实现了飞和游的行为,并且这些行为的体现是通过 Bird 和 Fish 去体现的。

合成复用的优点

  • 组合而非继承:Duck 类不直接继承 Bird 或 Fish,而是通过组合的方式委托它们的行为。这避免了继承关系带来的耦合性,增强了灵活性和可扩展性。
  • 行为复用:Duck 类通过组合 Flyable 和 Swimmable 接口的具体实现(Bird 和 Fish),实现了飞行和游泳行为的复用,而无需重新实现这些行为的具体细节。
  • 灵活的扩展:如果以后需要给 Duck 添加新的行为,只需要修改组合的类(比如换成其他实现了 Flyable 或 Swimmable 的类)即可,而不需要修改 Duck 类本身

总结

  • 通过 合成复用,Duck 类将飞行和游泳的行为委托给了 Bird 和 Fish 类。这种设计方式比继承更加灵活,减少了类之间的耦合,增强了复用的灵活性和可扩展性。

合成复用与继承复用:适用场景和优缺点

合成复用

适用场景

  1. Has-A 关系
    合成复用适用于类之间存在 “有一个”Has-A)关系的情况。即,一个类通过包含其他类的实例来复用功能,而不是继承。例如:

    • Car 类有一个 Engine 类,这时 Car 类并不是 Engine 类的子类,而是包含了一个 Engine 实例。
  2. 行为变化
    当一个类需要灵活地组合多个不相关的行为时,可以考虑使用合成复用。通过组合不同的行为,类可以灵活地选择并实现不同的功能,而不必受限于单一的继承体系。例如:

    • Duck 需要同时拥有飞行和游泳的行为。不同的行为可以分别来自 BirdFish,这时可以通过合成复用来组合不同的行为实现。

优缺点

  • 优点

    • 低耦合:类之间通过组合关系而非继承,降低了耦合度。
    • 灵活性:合成复用能够在运行时动态组合不同的行为,提高了系统的灵活性。
    • 可扩展性好:可以随时扩展新的行为,而无需改变现有的类。
  • 缺点

    • 需要更多类和对象:可能会导致系统中出现更多的类和对象,增加了代码的复杂度。
    • 额外的委托开销:在组合的过程中,可能需要通过委托来调用其他类的行为,增加了性能开销。

继承复用

适用场景

  1. Is-A 关系
    继承复用适用于类之间存在 “是一个”Is-A)关系的情况。即,子类是父类的一种特殊类型,并且在子类中需要复用父类的功能。例如:

    • DogAnimal 的一种,“狗是动物”这个关系表明 Dog 可以继承自 Animal
  2. 共享实现
    如果子类与父类共享大量相同的实现,并且这个实现逻辑在子类中不需要改变时,继承是一种简洁的方式。父类提供通用的功能,子类可以直接复用。例如:

    • Car 类和 Truck 类都可以继承自 Vehicle 类,复用 Vehicle 类中通用的功能。

优缺点

  • 优点

    • 简洁:继承可以减少代码重复,子类可以直接复用父类的属性和方法。
    • 高效:继承使得父类的实现可以直接复用,减少了额外的代码和类的创建。
  • 缺点

    • 耦合度高:子类与父类紧密耦合,父类的改变会影响所有子类。
    • 不灵活:继承是静态的,一旦继承关系确定,无法动态改变。
    • 继承层次深:继承层次过深会导致代码的复杂性增加,使得维护和扩展变得更加困难。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

相关文章:

【未来编程:AI如何通过合成复用原则优化设计】

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言合成复用原则含义 继承复用含义UML图实现代码运行结果及分析优缺点 合成复用(我有这…...

【Rust自学】5.3. struct的方法(Method)

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 5.3.1. 什么是方法(Method) 方法和函数类似,也是用fn关键字进行声明,方法也有名称,也有参数&#xff…...

单片机 STM32入门

一、什么是单片机 单片机(Microcontroller Unit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(包括RAM和ROM)、输入/输出接口等集成在一个芯片上。单片机通常用于嵌入式系统,能够执行特定的…...

OneCode:开启高效编程新时代——企业定制出码手册

一、概述 OneCode 的 DSM(领域特定建模)出码模块是一个强大的工具,它支持多种建模方式,并具有强大的模型转换与集成能力,能够提升开发效率和代码质量,同时方便团队协作与知识传承,还具备方便的仿…...

学python还是学java?哪个相对来说比较容易上手?

在比较Python和Java哪个更容易上手时,可以从多个维度进行分析,包括语法简洁性、学习资源、应用领域、学习曲线等。 一、语法简洁性 Python:Python的语法简洁明了,更接近自然语言,易于理解和记忆。它使用缩进来表示代…...

C语言项目 天天酷跑(上篇)

前言 这里讲述这个天天酷跑是怎么实现的,我会在天天酷跑的下篇添加源代码,这里会讲述天天酷跑这个项目是如何实现的每一个思路,都是作者自己学习于别人的代码而创作的项目和思路,这个代码和网上有些许不一样,因为掺杂了…...

Windows 11 安装 Dify 完整指南 非docker环境

# Windows 11 安装 Dify 完整指南## 前置要求- Python 3.11 - Node.js 18 - PostgreSQL 14 - Redis for Windows - Git - Ollama (可选,用于本地模型)## 详细安装步骤### 1. 安装必要软件1. **Python 3.11**- 从 https://www.python.org/downloads/release/python-…...

MySQL变量

文章目录 MySQL变量系统变量查看系统变量设置系统变量 自定义变量用户变量局部变量 MySQL变量 MySQL变量分为系统变量和自定义变量 系统变量 系统变量有全局变量和会话变量 查看系统变量 #查看全局系统变量 show global variables; #根据条件查询全局系统变量 show global …...

Ubuntu离线安装Docker容器

前言 使用安装的工具snap安装在沙箱中,并且该沙箱之外的权限有限。docker无法从其隔离的沙箱环境访问外部文件系统。 目录 前言准备环境卸载已安装的Docker环境快照安装的Dockerapt删除Docker 安装docker-compose下载执行文件将文件移到 /usr/local/bin赋予执行权限…...

ensp 关于acl的运用和讲解

ACL(Access Control List,访问控制列表)是一种常用于网络设备(如路由器、交换机)上的安全机制,用于控制数据包的流动与访问权限。ACL 可以指定哪些数据包允许进入或离开某个网络接口,基于不同的…...

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…...

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…...

什么是MVCC?

MVCC(多版本并发控制,Multi-Version Concurrency Control)是一种用于数据库管理系统中的并发控制的技术。它允许多个事务同时对同一数据进行读取和修改,而不会相互干扰,从而提高了数据库的并发性能。以下是对MVCC的详细…...

C/C++基础错题归纳

文章目录 第1天1.下面程序段的运行结果是:答案知识补充 2.当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少?答案知识补充 3.下面程序输出是什么?答案其他讲解 第1天 1.下面程序段的运行结果是: char C[5]{‘a’,’b’…...

Nginx 常用安全头

Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。 常见的 HTTP 安全头及其作用 1. Content-Se…...

消息队列(一)消息队列的工作流程

什么是消息队列 首先,代入一个场景,我现在做一个多系统的集成,分别有系统A、B、C、D四个系统,A系统因为使用产生了业务数据,B、C、D需要使用这些数据做相关的业务处理和运算,最基本的做法就是通过接口通信…...

LeetCode 2605 从两个数字数组里生成最小数字

探寻两个数组数位关联下的最小数字问题 题目描述 给定两个只包含 1 到 9 之间数字的数组 nums1 和 nums2,并且每个数组中的元素都是互不相同的。我们需要返回最小的数字,要求这个数字满足两个数组都至少包含这个数字的某个数位。例如,若 nu…...

AI新书推荐:深度学习和大模型原理与实践(清华社)

本书简介 在这个信息爆炸、技术革新日新月异的时代,深度学习作为人工智能领域的重要分支,正引领着新一轮的技术革命。《深度学习和大模型原理与实践》一书,旨在为读者提供深度学习及其大模型技术的全面知识和实践应用的指南。 本书特色在于…...

32单片机串口数据接收、空闲IDLE中断详解

一、前提说明 一开始写单片机程序的时候不太清楚空闲中断这个东西,每次用串口接收数据,都要再开一个定时器,在定时器内进行倒计时,每次接收数据就重置计时时间,计时结束就触发中断,再判断所有接收的数据&am…...

WebRtc webrtc-streamer部署

文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...

shiro注入filter内存马(绕过长度限制)

shiro环境 https://github.com/yyhuni/shiroMemshell(实验环境) 这里用的 Client_memshell.java package com.example.demo;import javassist.ClassPool; import javassist.CtClass; import org.apache.shiro.crypto.AesCipherService; import org.ap…...

Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传

参考:https://juejin.cn/post/6870837414852886542#heading-9 一般计算大文件的md5都是前端来做,因为如果后端来做,那得等到上传成功后才能计算md5值,并且读取的时间也很长。 为了解决文件大传输慢的问题,前端可以通…...

渗透Vulnhub-DC-9靶机

本篇文章旨在为网络安全渗透测试行业靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列DC-6靶机有定的了解 一、信息收集阶段 DC-9靶场信息: DC-9靶场介绍: https://www.vulnhub.com/entry/dc-9,412/ DC-9靶场下载: https://download.vu…...

springboot477基于vue技术的农业设备租赁系统(论文+源码)_kaic

摘 要 使用旧方法对农业设备租赁系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在农业设备租赁系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的农…...

CentOS常见命令

CentOS(Community ENTerprise Operating System)基于Red Hat Enterprise Linux(RHEL)源代码开发,是常用的Linux发行版之一。在CentOS系统中,有许多命令用于管理和操作系统,以下是一些CentOS系统…...

oracle 设置归档日志存放路径

oracle 设置归档日志存放路径 1、创建新目录 mkdir /archive chown -R oracle:oinstall /archive 注:条件允许的话,/archive 目录应独立挂载。1、便于监控目录使用率;2、避免和其它文件混淆,便于管理。 2、设置归档日志存放路…...

机器学习1-简单神经网络

相比传统的机器学习算法,深度学习做出了哪些改进呢?其实两者在理论结构上是一致的,即:模型假设、评价函数和优化算法,其根本差别在于假设的复杂度 构建简单神经网络(未训练): # 封装…...

C++的侵入式链表

非侵入式链表 非侵入式链表是一种链表数据结构,其中每个元素(节点)并不需要自己包含指向前后节点的指针。链表的结构和节点的存储是分开的,链表容器会单独管理这些指针。 常见的非侵入式链表节点可以由以下所示,即&a…...

MFC案例:图片文件转图标(ico)格式

本案例程序目的是将一般图像文件转换成图标格式(ico)。实现起来不是很复杂,这里为了介绍MFC的具体使用方法,在程序界面上分成几个功能块,包括:打开图像文件、选择ICON大小、转换、预览、保存等。相关具体步骤如下: 一、…...

【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理

文章目录 一、软件下载安装1、Unity官网2、下载Unity Hub 二、修改Unity Hub配置1、设置Unity Hub中文语言2、修改默认存储目录 三、安装unity编辑器1、点击安装编辑器2、版本选择3、关于版本号4、安装模块选择5、等待下载完成自动安装即可6、追加unity和模块 四、许可证管理专…...

东子生物完成A轮战略融资,数字商品交易全新升级为数商时代

2024年11月23日,东子生物数字时代正式上线,标志着公司全面迈入“数商时代”,作为国内领先的生物科技企业,东子生物在数字化浪潮中精准布局,以创新科技推动产业升级,以全新的思维引领健康产业,兼…...

数据结构经典算法总复习(上卷)

第一章&#xff1a;数据结构导论 无重要考点&#xff0c;仅需了解时间复杂度。 第二章&#xff1a;线性表 1.获得线性表第i个元素 void GetElem_sq(SqList L, int i, ElemType &e) {if (i<1 || i>L.length) ErrorMsg("Invalid i value"); //注意错误监…...

电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?

电脑使用CDR时弹出“计算机丢失mfc140u.dll”错误&#xff1a;原因与解决方案 在日常电脑使用中&#xff0c;我们时常会遇到各种系统报错和文件丢失问题。特别是当我们使用某些特定软件&#xff0c;如CorelDRAW&#xff08;简称CDR&#xff09;时&#xff0c;可能会遇到“计算…...

oracle使用imp命令导入dmp文件

需求&#xff1a; 增量导入 tbl_servicelegalclause 表数据&#xff08;dmp格式&#xff09;。 导入思路&#xff1a;使用 dba 创建一个 临时库&#xff0c;先将 tbl_servicelegalclause.dmp&#xff08;增量的数据&#xff09; 文件导入到 临时库&#xff0c;然后确认临时库数…...

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决

电脑蓝屏是让许多用户头疼的问题&#xff0c;其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法&#xff0c;能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏&#xff0c;如金手指氧化、芯片…...

Logback日志框架中的继承机制详解

在Logback框架中&#xff0c;logger的继承机制是基于层级结构&#xff08;hierarchical context&#xff09;工作的。每个logger都被分配一个名称&#xff0c;这个名称可以看作是一个路径或目录结构&#xff0c;从而形成了一个逻辑上的树状结构。这种结构使得日志记录具有很强的…...

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…...

node.js的异步工作之---回调函数与回调地狱

回调函数&#xff1a;在 Node.js 中&#xff0c;很多 API 都是异步的&#xff0c;通常通过回调函数来处理操作完成后的结果。这种回调模式虽然非常高效&#xff0c;但会导致代码逐渐变得难以维护&#xff0c;尤其是当有多个异步操作嵌套时&#xff08;即回调地狱&#xff09;。…...

tcp 的三次握手与四次挥手

问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...

《三角洲行动》游戏运行时提示“缺失kernel32.dll”:问题解析与解决方案

《三角洲行动》游戏运行时提示“缺失kernel32.dll”&#xff1a;问题解析与解决方案 作为软件开发领域的一名从业者&#xff0c;我深知电脑游戏运行过程中可能遇到的各种挑战&#xff0c;尤其是文件丢失、文件损坏以及系统报错等问题。今天&#xff0c;我将以经典游戏《三角洲…...

Android——自定义按钮button

项目中经常高频使用按钮&#xff0c;要求&#xff1a;可设置颜色&#xff0c;有圆角且有按下效果的Button 一、自定义按钮button button的代码为 package com.fslihua.clickeffectimport android.annotation.SuppressLint import android.content.Context import android.gra…...

Pandas基础学习(1)

之前看的pandas的教材和课程里&#xff0c;内容参差不齐&#xff0c;实际使用很少的方法的内容有点多&#xff0c;导致很乱而且记不住那么多&#xff0c;这个帖子尽量用最少的文字&#xff0c;最精炼的语言来总结比较实用的方法&#xff0c;内容主要来源于《利用python进行数据…...

20241224在Ubuntu20.04.6下给X99平台上的M6000显卡安装驱动程序

20241224在Ubuntu20.04.6下给X99平台上的M6000显卡安装驱动程序 2024/12/24 16:18 下载驱动程序&#xff1a; https://www.nvidia.cn/drivers/lookup/ https://www.nvidia.cn/drivers/results/ https://www.nvidia.cn/drivers/details/237923/ https://www.nvidia.cn/drivers/l…...

批量多线程给TXT文档插入相关腾讯AI【高质量无水印无版权】原创图片

给蜘蛛访问的网站文章插入相关图片&#xff0c;可以带来以下好处&#xff1a; ‌1、提升用户体验‌&#xff1a;图片能够直观地展示文章内容&#xff0c;帮助用户更好地理解和消化信息。对于阅读者来说&#xff0c;图文并茂的内容往往更具吸引力&#xff0c;也能提高他们的阅读…...

保护模式基本概念

CPU 架构 RISC&#xff08;Reduced Instruction Set Computer&#xff09; 中文即"精简指令集计算机”。RISC构架的指令格式和长度通常是固定的&#xff08;如ARM是32位的指令&#xff09;、且指令和寻址方式少而简单、大多数指令在一个周期内就可以执行完毕 CISC&…...

mysql 查询优化之字段建立全文索引

最近在接手一些老项目时发现表设计存在问题导致查询较慢 例如一张旧表的设计&#xff1a; 模糊匹配某个关键字时,需要十几秒左右,而且表的数据量不多 都知道mysql8.0版本InnoDB引擎都支持全文索引了,因此可以在content建立全文索引&#xff0c;但全文索引对中文支持并不完善…...

redis和mysql的区别

Redis是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;将数据存储在缓存中&#xff0c;这虽然提高了运行效率&#xff0c;但是保存时间却很短。将数据存储在内存中&#xff0c;因此读写速度非常快&#xff0c;特别适合用于需要高速访问的场景&#xff0c;如缓存…...

【Laravel】接口的访问频率限制器

Laravel 接口的访问频率&#xff0c;你可以在 Laravel 中使用速率限制器&#xff08;Rate Limiter&#xff09;。以下是一个详细的步骤&#xff0c;展示如何为这个特定的 API 路由设置速率限制&#xff1a; 1. 配置 RouteServiceProvider 首先&#xff0c;确保在 App\Provide…...

LabVIEW水泵性能测试系统

在现代工业应用中&#xff0c;水泵作为一种广泛使用的流体输送设备&#xff0c;其性能的可靠性对整个生产系统的稳定运行至关重要。通过LabVIEW软件配合专业硬件设备&#xff0c;设计了一套水泵性能测试系统&#xff0c;实现对各类水泵的综合性能测试与分析&#xff0c;提升水泵…...

基于推理的目标检测 DetGPT

基于推理的目标检测 DetGPT flyfish detgpt.github.io 近年来&#xff0c;由于大型语言模型&#xff08;LLMs&#xff09;的发展&#xff0c;计算机视觉领域取得了重大进展。这些模型使人类与机器之间能够进行更有效、更复杂的交互&#xff0c;为模糊人类与机器智能界限的新技…...