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

设计模式 结构型 组合模式(Composite Pattern)与 常见技术框架应用 解析

在这里插入图片描述

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。通过这种模式,客户端可以一致地处理单个对象和对象组合。

在软件开发中,我们经常会遇到处理对象的层次结构的情况。例如,在图形系统中,有简单的图形(如直线、圆),也有由这些简单图形组合而成的复杂图形;在文件系统中,有文件和文件夹,文件夹可以包含文件和其他文件夹。组合模式就是为了方便地处理这种“部分 - 整体”的层次结构而诞生的。

一、核心思想

核心思想是让客户能够透明地使用单独的个体或者由多个个体组成的群体。无论是一个单一的对象还是一个复杂对象的集合,对于客户端来说,它们都是一样的,这样就可以简化客户端代码。

二、定义与结构

  • 定义:组合模式允许你将对象组合成树形结构来表现“部分 - 整体”的层次结构。组合能让客户端以一致的方式处理个别对象以及对象组合。
  • 结构
    • Component(抽象组件):这是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。它可以是抽象类或者接口,定义了叶子节点和组合节点都需要实现的操作,比如添加(add)、删除(remove)和获取子节点(getChild)等方法。
    • Leaf(叶子节点):叶子节点对象是组合的最底层对象,它没有子节点。它实现了组件接口中定义的操作,但对于涉及子节点的操作(如添加和删除子节点)通常不做任何处理或者抛出异常,因为叶子节点没有子节点。
    • Composite(组合节点):组合节点表示包含子节点的节点对象。它实现了组件接口,并且在内部维护一个子组件的集合。它的主要职责是实现对子组件的添加、删除和遍历等操作,并且在执行某些操作时,会将请求递归地传递给它的子组件。

三、角色

1、抽象组件(Component)

职责

  • 定义了组合中对象的接口,这个接口可以被叶子节点和组合节点共同实现。
  • 可以包含一些默认的方法实现,这些实现对于叶子节点和组合节点可能有不同的行为。

示例代码(以图形绘制系统为例)

// 抽象组件
interface Graphic {void draw();
}

这里定义了一个Graphic接口,draw方法是所有图形(无论是简单图形还是复杂图形组合)都需要实现的绘制方法。

2、叶子节点(Leaf)

职责

  • 表示树形结构中的叶子对象,没有子节点。
  • 实现抽象组件接口中定义的方法,但是对于和子节点相关的操作(如添加、删除子节点)通常不实现或者抛出异常。

示例代码(以图形绘制系统为例)

// 叶子节点 - 圆形
class Circle implements Graphic {@Overridepublic void draw() {System.out.println("绘制圆形");}
}
// 叶子节点 - 矩形
class Rectangle implements Graphic {@Overridepublic void draw() {System.out.println("绘制矩形");}
}

CircleRectangle类是叶子节点,它们实现了Graphic接口的draw方法,用于绘制自身,但是它们没有子节点相关的操作,因为它们本身就是最基本的图形单元。

3、组合节点(Composite)

职责

  • 表示包含子节点的对象,维护一个子组件的集合。
  • 实现抽象组件接口中的方法,并且在这些方法中通常会递归地调用子组件的相应方法。
  • 提供管理子组件的方法,如添加、删除和获取子组件。

示例代码(以图形绘制系统为例)

// 组合节点
class ComplexGraphic implements Graphic {private List<Graphic> graphics = new ArrayList<>();public void add(Graphic graphic) {graphics.add(graphic);}@Overridepublic void draw() {for (Graphic graphic : graphics) {graphic.draw();}}
}

ComplexGraphic是组合节点,它内部有一个List来保存子图形。add方法用于添加子图形,draw方法会遍历所有子图形并调用它们的draw方法,从而实现复杂图形的绘制。

四、实现步骤及代码示例

以图形绘制系统为例:

1. 步骤一:定义抽象组件(Graphic)

如上述代码所示,定义Graphic接口,其中包含draw方法。这是所有图形(简单图形和复杂图形组合)的公共接口。

2. 步骤二:创建叶子节点(Circle和Rectangle)

分别创建CircleRectangle类实现Graphic接口。在draw方法中实现各自的绘制逻辑,例如Circle类的draw方法输出“绘制圆形”,Rectangle类的draw方法输出“绘制矩形”。

3. 步骤三:构建组合节点(ComplexGraphic)

  • 创建ComplexGraphic类实现Graphic接口。
  • 定义一个List<Graphic>类型的成员变量,用于存储子图形。
  • 实现add方法,用于将子图形添加到列表中。
  • 实现draw方法,通过遍历列表中的子图形并调用它们的draw方法来绘制复杂图形。

4. 步骤四:使用组合模式

public class Main {public static void main(String[] args) {// 创建一个复杂图形ComplexGraphic complexGraphic = new ComplexGraphic();// 添加一个圆形和一个矩形到复杂图形中complexGraphic.add(new Circle());complexGraphic.add(new Rectangle());// 绘制复杂图形complexGraphic.draw();}
}

main方法中,首先创建一个ComplexGraphic对象,然后添加一个Circle和一个Rectangle作为子图形,最后调用draw方法来绘制这个复杂图形。客户端代码只需要调用draw方法,不需要区分是简单图形还是复杂图形组合,这体现了组合模式的统一处理方式。

五、常见技术框架应用

1、在Java AWT/Swing中的应用

组件与容器关系

  • 在Java的图形用户界面(GUI)编程中,Container类(组合节点)和Component类(叶子节点或者其他组合节点)的关系符合组合模式。Container类可以包含多个Component
  • 例如,JPanel是一个ContainerJButtonJLabelComponent

示例代码(简单的Swing界面布局)

import javax.swing.*;
import java.awt.*;public class SwingCompositeExample {public static void main(String[] args) {JFrame frame = new JFrame("组合模式在Swing中的应用");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300, 300);JPanel panel = new JPanel();panel.setLayout(new FlowLayout());JButton button1 = new JButton("按钮1");JButton button2 = new JButton("按钮2");panel.add(button1);panel.add(button2);frame.add(panel);frame.setVisible(true);}
}

在这个示例中,JFrame(顶级窗口,类似于组合模式中的一个组合节点)包含JPanel(组合节点),JPanel又包含JButton(叶子节点)。当JFrame被显示时,它会递归地布局和显示所有包含的组件,这和组合模式中组合节点操作子节点的方式类似。

2、文件系统的应用

文件与文件夹的树形结构

  • 文件系统是组合模式的典型例子。文件可以看作是叶子节点,文件夹可以看作是组合节点。文件夹可以包含文件和其他文件夹。

示例代码(简单的文件系统遍历模拟)

import java.util.ArrayList;
import java.util.List;// 抽象组件 - 文件系统元素
interface FileSystemElement {void display();
}// 叶子节点 - 文件
class File implements FileSystemElement {private String name;public File(String name) {this.name = name;}@Overridepublic void display() {System.out.println("文件: " + name);}
}// 组合节点 - 文件夹
class Directory implements FileSystemElement {private String name;private List<FileSystemElement> elements = new ArrayList<>();public Directory(String name) {this.name = name;}public void add(FileSystemElement element) {elements.add(element);}@Overridepublic void display() {System.out.println("文件夹: " + name);for (FileSystemElement element : elements) {element.display();}}
}public class FileSystemCompositeExample {public static void main(String[] args) {Directory root = new Directory("根目录");File file1 = new File("文件1");File file2 = new File("文件2");Directory subDir = new Directory("子目录");File subFile = new File("子文件");root.add(file1);root.add(file2);root.add(subDir);subDir.add(subFile);root.display();}
}

在这个示例中,定义了FileSystemElement接口,File类实现了文件叶子节点,Directory类实现了文件夹组合节点。通过display方法来展示文件或文件夹的信息,文件夹的display方法会递归地展示其包含的所有文件和文件夹。

3、UI组件树

在React中,组合模式被广泛应用于构建UI组件树:

// React Component Example
function Leaf(props) {return <div>{props.text}</div>;
}class Composite extends React.Component {render() {return (<div>{this.props.children.map((child, index) => (<div key={index}>{child}</div>))}</div>);}
}// Usage in App.js
function App() {return (<Composite><Leaf text="Child 1" /><Leaf text="Child 2" /></Composite>);
}

六、应用场景

  • 树形结构数据表示:当需要表示树形结构的数据,如组织结构图、文件系统、菜单系统等,组合模式可以很好地对这种结构进行建模。
  • 统一处理对象和对象组合:如果客户端需要以相同的方式处理单个对象和对象组合,组合模式可以提供统一的接口。例如,在图形绘制系统中,无论是绘制单个图形还是由多个图形组成的复杂图形,都可以使用相同的绘制方法。
  • 部分 - 整体层次关系的操作:对于具有部分 - 整体层次关系的对象,并且需要对这种关系进行动态的添加、删除和遍历操作时,组合模式非常适用。比如在一个软件系统中,模块可以包含子模块,并且可以动态地添加或删除子模块。
  • 图形界面构建

七、优缺点

优点

  1. 简化客户端代码:客户端可以统一地使用组合结构中的所有对象,不需要区分是单个对象还是组合对象,大大简化了客户端的代码结构。
  2. 易于添加新类型的组件:无论是添加新的叶子节点还是新的组合节点,只要它们实现了抽象组件接口,就可以很容易地集成到现有的组合结构中。
  3. 方便进行递归操作:由于组合模式天然地形成了树形结构,对于树形结构的递归操作(如遍历、计算等)变得更加容易实现,代码更加清晰。

缺点

  1. 设计复杂度过高:对于简单的层次结构,使用组合模式可能会使设计变得过于复杂。因为需要引入抽象组件、叶子节点和组合节点等多个角色,增加了代码的复杂性。
  2. 限制组件接口通用性:为了使叶子节点和组合节点都能实现抽象组件接口,接口的设计可能会受到一定的限制。有时候可能需要在接口中包含一些对于叶子节点没有实际意义的方法(如添加子节点的方法对于叶子节点通常没有意义)。

在这里插入图片描述

相关文章:

设计模式 结构型 组合模式(Composite Pattern)与 常见技术框架应用 解析

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。通过这种模式&#xff0c;客户端可以一致地处理单个对象和对象组合。 在软件开发中&#xff0c;我们经常会遇到处理对象的层…...

pcie学习记录(1):基于xdma的工程搭建

写在最前面 Vivado的版本&#xff01;&#xff01;&#xff01;&#xff08;后面验证是错误的思路&#xff0c;可以不用看&#xff09; XDMA PCIE开发期间两个版本问题的解决https://blog.csdn.net/kris_paul/article/details/128131527 我说实话在这里卡了很久&#xff…...

HTML5 动画效果:淡入淡出(Fade In/Out)详解

HTML5 动画效果&#xff1a;淡入淡出&#xff08;Fade In/Out&#xff09;详解 淡入淡出&#xff08;Fade In/Out&#xff09;是一种常见的动画效果&#xff0c;使元素逐渐显现或消失&#xff0c;增强用户体验。以下是淡入淡出的详细介绍及实现示例。 1. 淡入淡出的特点 平滑…...

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面&#xff0c;成为Science、Nature论文的…...

maven如何从外部导包

1.找到你项目的文件位置&#xff0c;将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮...

使用python发送gmail邮件

首先要有一个gmail邮箱&#xff1a;https://accounts.google.com/lifecycle/steps/signup/name?ddm1&dshS237022023:1736341599452877&flowEntrySignUp&flowNameGlifWebSignIn&TLAE–Llw01wbAW0P9gYEloi_C5wBurZd0MeIi4B1j8daH-72CNcc-1qwapbIRA_UZ&conti…...

Android 绘制学习总结

1、刷新率介绍 我们先来理一下基本的概念&#xff1a; 1、60 fps 的意思是说&#xff0c;画面每秒更新 60 次 2、这 60 次更新&#xff0c;是要均匀更新的&#xff0c;不是说一会快&#xff0c;一会慢&#xff0c;那样视觉上也会觉得不流畅 3、每秒 60 次&#xff0c;也就是 1…...

推动多语言语音科技迈向新高度:INTERSPEECH 2025 ML-SUPERB 2.0 挑战赛

随着语音技术在各领域应用的迅速扩展&#xff0c;全球语言与口音的多样性成为技术进一步突破的重大挑战。为了应对这一难题&#xff0c;来自卡内基梅隆大学&#xff08;CMU&#xff09;、斯坦福大学&#xff08;Stanford University&#xff09;、乔治梅森大学(George Mason Un…...

『SQLite』子查询可以这样用

摘要&#xff1a;本节主要讲子查询的使用&#xff0c;可以在查询、更新、修改、删除等操作中使用。 什么是子查询&#xff1f; 子查询是一种在 SELECT-SQL 语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时&#xff0c;称之为子查询&#xff08;Sub Query&#…...

thingsboard通过mqtt设备连接及数据交互---记录一次问题--1883端口没开,到服务器控制面板中打开安全组1883端口

1&#xff0c;链接不上&#xff1a;原因是1883端口没开&#xff0c;到服务器控制面板中打开安全组1883端口 2&#xff0c;参考链接&#xff1a; https://blog.csdn.net/bujingyun8/article/details/120024788...

Pod状态为“被驱逐(evicted)”的解决思路

在Kubernetes集群中&#xff0c;Pod状态为“被驱逐&#xff08;evicted&#xff09;”表示Pod无法在当前节点上继续运行&#xff0c;已被集群从节点上移除。针对Pod被驱逐的问题&#xff0c;以下是一些常见的解决方法&#xff1a; 一、识别被驱逐的原因 资源不足&#xff1a;…...

【代码随想录-数组篇02】:双指针(快慢指针)法相关力扣练习题

提示1&#xff1a;本篇共包含5道题&#xff0c;全部用python语言进行实践&#xff0c;看会不如行动会&#xff0c;请大家多多实践&#xff5e; 提示2&#xff1a;强烈推荐 代码随想录 提示3&#xff1a;博主最近在跟着【代码随想录】进行刷题&#xff0c;有小伙伴有想法的可以私…...

Docker基础

Docker基础 命令介绍 其中&#xff0c;比较常见的命令有&#xff1a; 命令说明文档地址docker pull拉取镜像docker pulldocker push推送镜像到DockerRegistrydocker pushdocker images查看本地镜像docker imagesdocker rmi删除本地镜像docker rmidocker run创建并运行容器&am…...

计算机网络之---传输介质

传输介质的定义 传输介质是计算机网络中用于传递信号的物理媒介。它将数据从发送方传输到接收方&#xff0c;可以是有线的&#xff08;如铜线、电缆、光纤等&#xff09;或者无线的&#xff08;如无线电波、微波等&#xff09;。传输介质的作用是承载和传播物理信号&#xff08…...

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述&#xff1a;给你一个链表的头节点 head 和一个整数 val &#xff…...

P10424 [蓝桥杯 2024 省 B] 好数

题目描述 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位……&#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位……&#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。 给定一个正整数 N&#xf…...

MySQL - 子查询和相关子查询详解

在SQL中&#xff0c;子查询&#xff08;Subquery&#xff09;和相关子查询&#xff08;Correlated Subquery&#xff09;是非常强大且灵活的工具&#xff0c;可以用于执行复杂的数据检索和操作。它们允许我们在一个查询中嵌套另一个查询&#xff0c;从而实现更复杂的逻辑和条件…...

MySQL入门学习笔记

第一章 数据库系统概述 数据库的4个基本概念 数据、数据库、数据库管理系统、数据库系统是与数据库技术密切相关的4个基本概念 数据 数据是数据库中存储的基本对象&#xff0c;描述事物的符号记录称为数据&#xff0c;数据的表现形式还不能完全表达其内容&#xff0c;需要…...

使用vue-pdf预览pdf和解决pdf电子签章显示问题

使用vue-pdf预览pdf和解决pdf电子签章显示问题 第一步&#xff1a;npm install vue-pdf 第二步页面使用vue-pdf <template><div class"pdf1"><Pdf v-for"i in numPages" :key"i" :src"src" :page"i" />…...

MySQL Windows 11 的 MySQL 配置文件 (my.ini) 路径查找指南

✅ Windows 11 的 MySQL 配置文件 (my.ini) 路径查找指南 在 Windows 11 上&#xff0c;MySQL 的 ini 配置文件&#xff08;通常是 my.ini 或 my.cnf&#xff09;的位置取决于 MySQL 的安装方式。下面是一些常见的路径和方法来找到这个配置文件。 &#x1f50d; 方法 1&#…...

记一次k8s下容器启动失败,容器无日志问题排查

问题 背景 本地开发时&#xff0c;某应用增加logback-spring.xml配置文件&#xff0c;加入必要的依赖&#xff1a; <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>8…...

Delaunay三角刨分算法理解及c#过程实现

Delaunay三角刨分算法理解及c#过程实现 0 引言1 关于三角剖分2 Delaunay三角剖分算法实现及对比3 结语0 引言 💻💻AI一下💻💻 三角剖分是什么? 三角剖分是一种将平面或曲面划分成三角形集合的方法。在二维平面中,给定一个平面区域(可以是多边形等),通过连接区域…...

【单片机】实现一个简单的ADC滤波器

实现一个 ADC的滤波器&#xff0c;PT1 滤波器&#xff08;也称为一阶低通滤波器&#xff09;&#xff0c;用于对输入信号进行滤波处理。 typedef struct PT1FilterSettings PT1FilterSettings; struct PT1FilterSettings {//! last Filter output valueuint32_t filtValOld;//…...

在 Ubuntu 22.04 上从 Wayland 切换到 X11的详细步骤

在 Ubuntu 22.04 上从 Wayland 切换到 X11&#xff0c;步骤其实很简单&#xff0c;主要是在登录界面进行选择。以下是详细的步骤&#xff1a; 步骤 1&#xff1a;退出当前会话 首先&#xff0c;点击屏幕右上角的用户菜单&#xff0c;选择 注销 或 退出&#xff0c;以退出当前…...

NOVA:AutoRegressive Video Generation Without Vector Quantization——自回归视频生成无需向量量化

这篇文章介绍了一种名为NOVA的新型自回归模型&#xff0c;用于高效的文本到图像和文本到视频生成。以下是文章的主要内容总结&#xff1a; 1. 研究背景与问题 自回归大语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;中表现出色&#xff0c;但…...

79 Openssl3.0 RSA公钥加密数据

1 引言 最近不小心用到了openssl3.0&#xff0c;项目中需要使用rsa非对称加解密算法&#xff0c;所以把openssl3.0使用公钥加密数据的函数调用摸了一遍。 之所以记录此篇文章&#xff0c;是因为网络上大多数是openssl3.0以前的版本的函数接口&#xff0c;而openssl3.0之后已经丢…...

基于单片机的数字电子秒表设计

此文章谨为课设记录 一、实验要求 题目六 数字电子时钟 基本要求&#xff1a; (1) 设计一个单片机电子时钟&#xff0c;设计的电子时钟通过数码管显示&#xff1b; (2) 具有能通过按键实现设置时间的功能&#xff1b; (3) 显示格式为小时十位、小时个位&#xff0c;分…...

rust学习——环境搭建

rust安装&#xff1a;https://kaisery.github.io/trpl-zh-cn/ch01-01-installation.html 1、vscode装插件&#xff1a; toml语法支持 依赖管理 rust语法支持 2、创建demo 3、查看目录 4、执行文件的几种方式&#xff1a; rust安装&#xff1a;https://www.rust-lang.org/z…...

解读若依框架中的 @Xss 注解

文章目录 1. 背景与问题定义什么是 XSS 攻击&#xff1f;XSS 的常见类型传统解决方案的局限性 2. Xss 注解详解Xss 注解源码解析注解核心要素 XssValidator 实现解析核心逻辑 3. 应用场景场景一&#xff1a;表单输入校验示例代码 场景二&#xff1a;API 接口参数校验示例代码 4…...

ADO.NET知识总结4---SqlParameter参数

目录 5.1 SqlParameter介绍 5.2 SqlParameter创建参数方式 5.3 添加命令参数 5.4 参数使用 5.1 SqlParameter介绍 SqlParameter: 表示SqlCommand对象的参数&#xff0c;或与DataSet中列的映射。 常用属性 DbType 参数的SqlDbType&#xff08;即 数据库的类型而言&#x…...

分布式主键ID生成方式-snowflake雪花算法

这里写自定义目录标题 一、业务场景二、技术选型1、UUID方案2、Leaf方案-美团&#xff08;基于数据库自增id&#xff09;3、Snowflake雪花算法方案 总结 一、业务场景 大量的业务数据需要保存到数据库中&#xff0c;原来的单库单表的方式扛不住大数据量、高并发&#xff0c;需…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 4:MHE表示能力

目录 1 MHE的表示能力2 基于Frobenius-范数的低秩逼近3 基于CE的低秩近似 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者&#xff1a;Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位&#xff1a;山东大学 代码&#xff1a;h…...

Spring Boot 项目启动报 NoClassDefFoundError 异常的原因分析与解决方案 - jackson 版本不一致

目录 报错: 问题分析&#xff1a; 解决方案&#xff1a; 方案 1&#xff1a;对 Jackson 版本进行统一 方案 2&#xff1a;升级 Springfox 版本 方案 3&#xff1a;替换 Springfox 为 springdoc-openapi&#xff08;推荐&#xff09; 方案 4&#xff1a;排除冲突的 Jack…...

Ubuntu网络连接问题(笔记本更换wifi后,虚拟机连不上网络)

1、笔记本更换wifi后&#xff0c;虚拟机的IP地址变了&#xff0c;然后就连不上网络了&#xff08;主机笔记本连接wifi正常上网&#xff09; 2、修改子网地址&#xff08;按照ubutun的ip设置子网掩码&#xff09; 3、Ubuntu已经显示网络连接正常了&#xff0c;但是就是无法上网&…...

vue3中el-table实现多表头并表格合并行或列

1、el-table中添加事件 :span-method"genderSpanCity" <el-table :span-method"genderSpanCity":data"data.tableData":fit"true" table-layout"fixed" header-align"center" stripestyle"width:100%;he…...

Selenium 八大元素定位方法及场景扩展

Selenium 提供了八种常见的元素定位方法&#xff0c;用于在网页中准确找到需要操作的元素。以下是详细介绍以及一些特殊场景的解决方案。 1. ID 定位 用法&#xff1a; 通过元素的唯一 id 属性进行定位。 element driver.find_element(By.ID, "element_id")使用场…...

计算机网络之---网络拓扑

什么是网络拓扑 为什么需要网络拓扑 网络拓扑有哪些 什么是网络拓扑 网络拓扑 是指网络中各设备&#xff08;如计算机、路由器、交换机等&#xff09;如何连接以及它们之间数据流动的结构和布局。它是网络设计的一个关键方面&#xff0c;决定了网络的性能、可扩展性、可靠性…...

YOLO11新王登基!实战改进版,杀穿顶会!

众所周知&#xff0c;YOLO一直是发论文的大热门&#xff01;而YOLO11做为其的最新版本&#xff0c;必然会在2025成为各大顶会的“宠儿”&#xff01; 主要在于&#xff1a;一方面&#xff0c;YOLO其他系列的改进早已卷成“红海”&#xff0c;而YOLO11提出才几个月&#xff0c;…...

【《游戏编程模式》实战04】状态模式实现敌人AI

目录 1、状态模式 2、使用工具 3、状态模式适用范围 4、实现内容 5、代码及思路 Enemy.cs EnemyState.cs 6、unity里的设置 7、运行效果展示 1、状态模式 “允许一个对象在其内部状态改变时改变自身的行为。对象看起来好像是在修改自身类。” 就是一个对象能随着自己…...

Linux 环境(Ubuntu)部署 Hadoop 环境

前置准备 准备三台机器 cat /etc/hosts 192.168.1.7 hadoop-master 192.168.1.11 hadoop-slave01 192.168.1.12 hadoop-slave02Linux 环境 cat /etc/os-release PRETTY_NAME"Ubuntu 24.10" NAME"Ubuntu" VERSION_ID"24.10" VERSION"24.…...

裸机器搭建k8s部署 1.28.10版本

问了搭建k8s集群踩了很多坑&#xff0c;问题主要出现在网络插件处&#xff0c;因此主要是master节点操作问题。重新走一下流程整理一下笔记。 目录 虚拟机准备 虚拟机 系统版本信息 修改镜像地址 配置静态ip 关闭防火前和交换分区 转发 IPv4 并让 iptables 看到桥接流量…...

np.ndarray 是 NumPy 库中的核心数据结构

np.ndarray 是 NumPy 库中的核心数据结构&#xff0c;代表一个多维数组&#xff08;或称为矩阵&#xff09;。它是一个高效的容器&#xff0c;用于存储和操作数据&#xff0c;可以包含任意类型的数据&#xff08;整数、浮点数、布尔值等&#xff09;。 主要特点&#xff1a; …...

全新免押租赁系统打造便捷安全的租赁体验

内容概要 全新免押租赁系统的推出&#xff0c;标志着租赁行业的一次重大变革。这个系统的最大特点就是“免押金”&#xff0c;大大减轻了用户在租赁过程中的经济负担。从此&#xff0c;不再需要为一部手机或其他商品支付高昂的押金&#xff0c;用户只需通过简单的信用评估&…...

C语言——结构体,位段,枚举和联合

目录 前言 结构体 1含义 2语法 3匿名结构体 4结构体自引用 5结构体的定义与初始化 6内存对齐 7修改对齐数 8结构体传参 位段 1含义 2位段的内存分配 ​编辑3位段的问题 4位段的应用 枚举 1含义 2定义 3枚举优点 4枚举使用 联合 1含义 2定义 3特点 4计…...

现场展示deepseek VS openAI o1模型大对比

DeepSeek-V3 模型的发布在 AI 领域引起了广泛关注。作为一款拥有 6850 亿参数的混合专家&#xff08;MoE&#xff09;语言模型&#xff0c;DeepSeek-V3 在多个基准测试中表现出色&#xff0c;甚至超越了一些闭源模型。其在 Aider 代码能力排行榜上的正确率达到 48.4%&#xff0…...

深度解析 tanh ⁡ tanh 激活函数

1. 引言 在现代深度学习中&#xff0c;激活函数&#xff08;Activation Function&#xff09;是神经网络的核心组件之一。它的主要作用是引入非线性&#xff0c;从而使神经网络能够学习和表示复杂的非线性关系。如果没有激活函数&#xff0c;神经网络的输出将只是输入的线性组…...

【Golang 面试题】每日 3 题(二十五)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

Unity Canvas中显示粒子特效

首先在场景中新建一个粒子特效 修改一下参数 1.改变粒子特效的渲染层级,层级修改为UI层,由UI相机渲染 使用粒子特效的Sorting Layer ID和Order In Layer,Sorting Layer ID设置为UI(如果没有UI层则新建就好了),对UI进行排序 对于要显示在前的UI组件添加Canvas组件,设置O…...

excel精简使用工具

1.获取sheet1的行填充到sheet2的列 希望在 Excel 中使用 INDEX 函数从不同的列中提取数据&#xff0c;并且每一行都引用不同的列。为了实现这个目标&#xff0c;你可以使用 COLUMN 函数来动态获取列的偏移量。 为了避免手动输入每个单元格的公式&#xff0c;你可以使用以下公…...

上手体验微软全新整合的王炸平台Fabric

体验确实不错&#xff0c;微软强大的生态能力。 把可视化&#xff0c;数仓&#xff0c;数据胡&#xff0c;数据工厂&#xff0c;机器学习&#xff0c;数据监控等技术都整合到一个平台了。所有数据全都存储在统一的one lake数据中心&#xff0c;消除数据孤岛问题。而且不同角色可…...