结构型——组合模式(Composite)day10

解决RK3566 USB OTG模式识别问题:从原理图分析到otg_mode文件操作全解析 本文深入解析RK3566 USB OTG模式识别问题,从硬件原理图设计到Linux内核的otg_mode文件操作,提供全面的调试方案。针对USB_OTG0_ID引脚电路设计、电源管理关联及内核驱动交互等关键点,给出实战调试技巧和常见问题解决方案,帮助开发者高效解决USB OTG模式切换难题。 阅读详情

组合模式针对树形结构的模式例如
在这里插入图片描述
传统方案实现
在这里插入图片描述

  1. 将学院看做是学校的子类, 系是学院的子类,这样实际上是站在组织大小来进行分层次的
  2. 实际上我们的要求是:在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等
  3. 解决方案: 把学校、院、系都看做是组织结构,他们之间没有继承的关系,而是一个树形结构,可以更好的实现管理操作。=> 组合模式

组合模式基本介绍

  1. 组合模式(Composite Patterm),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体部分”的层次关系。
  2. 组合模式依据树形结构来组合对象, 用来表示部分以及整体层次。
  3. 这种类型的设计模式属于结构型模式。
  4. 组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象

组合模式类图

在这里插入图片描述

  1. Component :这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理Component子部件, Component可以是抽象类或者接口
  2. Leaf: 在组合中表示叶子节点,叶子节点没有子节点
  3. Composite :非叶子节点, 用于存储子部件, 在Component 接口中实现子部件的相关操作,比如增加(add),删除。

组合模式实例

package com.xhl.Composite;

public abstract class Node {
	public abstract void p();
}

package com.xhl.Composite;

public class LeafNode extends Node {

	String name;
	
	public LeafNode(String name) {
		super();
		this.name = name;
	}

	@Override
	public void p() {
		// TODO Auto-generated method stub
		System.out.println(name);
	}

}
package com.xhl.Composite;

import java.util.ArrayList;
import java.util.List;

public class BranchNode extends Node {

	List<Node> nodes = new ArrayList();
	String name;
	
	public BranchNode(String name) {
		super();
		this.name = name;
	}

	@Override
	public void p() {
		// TODO Auto-generated method stub
		System.out.println(name);
	}

	public void add(Node node) {
		nodes.add(node);
	}
}
package com.xhl.Composite;

public class CompositeDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BranchNode univ = new BranchNode("清华大学");
		BranchNode comp = new BranchNode("计算机学院");
		BranchNode info = new BranchNode("信息工程学院");
		
		comp.add(new LeafNode("软件工程"));
		comp.add(new LeafNode("网络工程"));
		comp.add(new LeafNode("计算机科学技术"));
		
		info.add(new LeafNode("通信工程"));
		info.add(new LeafNode("信息工程"));
		
		univ.add(comp);
		univ.add(info);
		
		tree(univ,0);
	}

	private static void tree(Node node,int depth) {
		for(int i=0;i<depth;i++) System.out.print("== ");
		node.p();
		if(node instanceof BranchNode) {
			for(Node n : ((BranchNode) node).nodes) {
				tree(n,depth+1);
			}
		}
	}

}

在这里插入图片描述

组合模式在JDK集合中的应用

java集合类——HashMap就使用了组合模式
在这里插入图片描述
Node就是Leaf叶子节点
HashMap、AbstractHashMap就是 Composite :非叶子节点
Map就是 Component组合中对象声明接口

总结

1)简化客户端操作。 客户端只需要面对一-致的对象而不用考虑整体部分或者节点叶子的问题。
2)具有较强的扩展性。当我们要更改组合对象时,我们只需要调整内部的层次关系,客户端不用做出任何改动.
3)方便创建出复杂的层次结构。客户端不用理会组合里面的组成细节,容易添加节点或者叶子从而创建出复杂的树形结构
4)需要遍历组织机构,或者处理的对象具有树形结构时,非常适合使用组合模式.
5)要求较高的抽象性,如果节点和叶子有很多差异性的话,比如很多方法和属性都不一样,不适合使用组合模式

Vue2+OpenLayers动态绘制两个经纬度并计算距离(提供Gitee源码) 动态绘制两个经纬度并计算它们之间的距离。 阅读详情

相关推荐

基于PSINS的INS/NHC/ODO组合导航仿真全解析

组合导航通过多传感器融合克服单一导航系统的局限,是车辆自主定位的关键技术。其中惯性导航(INS)依靠陀螺仪与加速度计积分推算运动状态,但误差随时间累积;GNSS提供绝对位置,却在城市峡谷中易受多径效应和遮挡影响导致定位漂移。卡尔曼滤波作为信息融合核心,将不同量测按统计特性加权,实现优势互补。基于PSINS开源工具箱搭建的SINS/GNSS/ODO/NHC组合导航仿真,能够在GNSS失锁条件下利用非完整约束和里程计抑制惯性误差发散,广泛应用于无人驾驶、物流车辆自主定位等场景。本文围绕PSINS仿真环境,详细拆

weixin_29044713的博客 253

组合模式——公司组织结构

一 模式定义组合模式:将对象组合成树形结构以表示“部分一整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 二 组合模式举例1 模式分析我们借用公司组织结构图来说明这一模式。经过分析后,我们得出该模式静态类图如下:2代码示例2.1建立员工抽象类 package com.demo.composite; /** * 职工类接口 * * @author ...

weixin_30783913的博客 272

基于本地知识库的智能问答系统架构

智能问答系统的核心可以分为4部分。1)知识库构建。2)检索。3)后处理。4)推理。知识库构建:知识库中可以包含多个向量数据库和知识图谱等,核心是怎么建立索引,使得检索时能够将与问题相关的知识给检索出来。检索:从知识库中的多个库或者知识图谱中检索出与问题相关的信息。后处理:从知识库中检索出来的信息可能是冗余的,而且可能不符合我们希望的格式要求,因此,我们需要对这些数据进行过滤,格式化等操作。推理: 基于检索出来的知识进行推理,让输出能够回答用户的问题,目前主要使用大模型进行推理。

qq_44993593的博客 1709

设计模式之:组合模式

目录 组合模式动机与定义 组合模式结构与分析 组合模式实例与解析 组合模式效果与应用 组合模式扩展 组合模式动机与定义 模式动机: 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象,如子文件夹和文件)并调用执行。(递归调用) 由于容器对象和叶子对象在功能上的区别,在使用这些对象的客户端代...

Blossom 794

Skyworks SKY85331-11的Wi-Fi 6 (802.11ax)标准 2.4G 高功率WLAN前端模块解决方案

SKY85331-11是高度集成的2 GHz前端模块(FEM)包含2 GHz单刀双掷(SPDT)发送/接收(T / R)开关,2 GHz低噪声放大器(LNA)带旁路和一个2 GHz功率放大器(PA),用于大功率802.11ax应用程序和系统LNA和PA禁用功能可确保低漏电流 关闭模式。 包括一个集成的功率检测器以提供系统内的闭环功率控制。该设备提供Small (24-pin, 3 x 5 mm) (LGA)封装。 图1.引脚配置和封装如图所示 图2.信号引脚分配和功能引脚描述 图...

zhangbao19890622的博客 4504

相机标定-张正友棋盘格标定法

(X,Y,Z)为在世界坐标系下一点的物理坐标 ( u , v ) 为该点对应的在像素坐标系下的像素坐标 引入齐次坐标的原因:引入齐次坐标的目的是为了升维,将坐标从二维坐标变为三维坐标。 2.相机成像过程 相机成像系统中,共包含四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系。 (1)世界坐标系(,,) 描述目标在真实世界中的位置引入的参考坐标系。 (2)相机坐标系(,,) ...

qq_41275123的博客 1万+

【大话设计模式-11】组合模式(案例解析)

1 看一个学校院系展示需求 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院, 一个学院有多个系。如图: 2 传统方案解决学校院系展示(类图) 3 传统方案解决学校院系展示存在的问题分析 将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的 实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能很好实现的管理的操作,比如对学院、系的添加,删除,遍历等 解决方案:把学校、

计忆芳华的博客 1291

Windows 11下用Ollama一键部署DeepSeek-R1大模型(附8B/14B版本选择建议)

本文详细介绍了在Windows 11环境下使用Ollama工具一键部署DeepSeek-R1大模型的完整指南,包括8B和14B版本的选择建议。通过硬件评估、安装配置、性能优化等步骤,帮助开发者高效实现本地部署,提升AI应用体验。

weixin_29079643的博客 272

设计模式(十)——组合模式(Composite Pattern)

组合模式(Composite Pattern) 基本介绍 组合模式(Composite Pattern),又叫部分整体模式,把部分和整体的关系用树形结构来表示,从而使客户端对单个对象和组合对象的访问具有一致性,可以使用统一的方式处理部分对象和整体对象。 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 UML原理类图 角色及职责分析 抽象构件(Component)角色: 定义了叶...

Duktig的博客 504

开源滑翔伞升降速度表:基于STM32与传感器融合的DIY飞行仪表

传感器融合是现代嵌入式系统与物联网设备中的核心技术,它通过整合多个传感器的数据,利用滤波与估计算法,获得比单一传感器更精确、更可靠的环境感知能力。其技术价值在于提升系统的鲁棒性、精度和上下文理解能力,广泛应用于无人机导航、可穿戴设备、工业监测及智能驾驶等领域。本文聚焦于一个具体的工程实践案例——开源多功能滑翔伞升降速度表(Open-Vario),该项目巧妙地运用了**卡尔曼滤波器**进行气压与GNSS数据的融合,以精确计算升降率,并基于**FreeRTOS**实时操作系统构建了一个稳定、可扩展的嵌入式平台,

weixin_33657398的博客 176

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 557

设计模式精讲 Day 8:组合模式(Composite Pattern)

组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“整体-部分”的层次结构。组合模式让客户端可以统一地处理单个对象和对象组合,而无需关心它们的具体类型。将对象组织成树状结构客户端可以一致地操作单个对象和对象组合通过递归结构简化复杂系统的管理今天学习了组合模式(Composite Pattern),它是一种结构型设计模式,能够将对象组织成树形结构,使客户端可以统一处理单个对象和对象组合。

在未来等你的专栏 486

使用 FastAPI 和 LangGraph 构建生产级智能体 AI 系统

这是一本关于使用 FastAPI 和 LangGraph 构建生产级智能体 AI 系统的详细书籍,全文约 10 万字。《Production-Grade Agentic AI System Design and Implementation: Building Agentic AI Systems Using FastAPI and LangGraph》随着人工智能(AI)技术的迅猛发展,智能体(Agent)作为能够自主感知、推理、决策和行动的实体,正逐渐成为构建复杂智能系统的核心。从个性化推荐、客户服务到

AI天才研究院 346

设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用

组合模式用于构建树状结构的对象系统文件夹包含文件和子文件夹UI 容器包含多个控件公司组织结构:员工 ← 部门 ← 公司将对象组成树形结构,客户端可以“统一操作”叶子节点与中间节点。统一接口,客户端无差别调用树结构天然适合层次建模扩展方便,添加新节点只需实现 Component。

Interview_TC的博客 1173

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C#设计模式:组合模式(Composite Pattern)

一,C#设计模式:组合模式(Composite Pattern) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _9.组合模式 { //组合模式主要用来...

dcujcivw769565的博客 158

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

迭代器与组合模式

迭代器(Iterator)与组合(Composite)模式1. 迭代器模式1.1 早餐与午餐的合并1.2 两种不同的菜单表现方式带来的问题1.3 自定义迭代器1.4 java.util.Iterator1.5 扩展性单一责任原则组合模式要点 管理良好的集合 1. 迭代器模式 1.1 早餐与午餐的合并 煎饼屋和餐厅合并!!!同时要求合并菜单,由煎饼屋提供早餐,由餐厅负责午餐。 煎饼菜单如下: K&B’s薄煎饼早餐 ---- $2.99 薄煎饼、清蛋和吐司 薄煎饼早餐例餐 ---- $2.99

weixin_43381785的博客 667

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

迭代器模式(Iterator Pattern)与组合模式(Composite Pattern)

什么是迭代器模式 正式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。 把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。 一个迭代器模式的结构 一个聚合对象的接口,该接口中包含创建迭代器的方法,具体的聚合类实现该接口的创建迭代器方法,并返回一个迭代器对象; 一个迭代器接口,包含next、hasNe...

biangu1486的博客 360

设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)

目前已经更新的部分资料:网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!菜单/**煎饼屋菜单实现*//**

2401_84562251的博客 1058

设计模式--组合模式

目录:此模式中的示例,基于迭代器模式,传送门:迭代器模式 组合模式:允许你将对象组合成树形结构来表现"整体/部分"层次结构。组合能让客户以一致的方式处理个别对象以及对象组合; 知识点的梳理: 组合模式提供一个结构,可同时包容个别对象和组合对象; 组合模式允许客户对个别对象以及组合对象一视同仁; 组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点; 在实现组合模式时,有

老赫的私人厨房 913

《Head First 设计模式》学习笔记——迭代器模式 + 组合模式

迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器。————题记 设计模式 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。 把游走

1729

设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)(1)

**定义菜单组件*/

2401_84004024的博客 469

23个设计模式一文搞懂

本笔记涵盖 23 种经典设计模式,按创建型、结构型、行为型三大类整理。每个模式配有生活类比、核心思想、结构图解、实现要点、真实应用案例、适用场景、优缺点分析及常见面试题。

weixin_72753562的博客 802

航天任务数据建模实战:从实体事件到时间线分析

数据建模是处理复杂业务逻辑和时序信息的核心技术,其核心在于将现实世界中的对象和过程抽象为计算机可处理的实体与事件。通过定义清晰的类结构(如航天器、任务事件)并建立它们之间的关联关系,可以构建出能够精确描述系统状态变化的数据模型。这种建模方法在航天任务分析、物流跟踪、项目管理等涉及多实体状态转换的场景中具有极高的技术价值,能够将非结构化的历史描述转化为可查询、可计算的结构化数据。本文以挑战者号航天飞机STS-6任务为具体案例,详细演示了如何使用Python实现从实体定义、事件创建到时间线查询与报告生成的全过程

weixin_34293911的博客 554

创建型——工厂系列(Factory)day04

任何可以产生对象的方法或类,都可以称为工厂 单例也是一种工厂 为什么有了new以后,还要有工厂? 1、灵活控制生产过程 2、权限、修饰、日志…… 接口模式 package cn.xhl.interfacemodel; public interface IFruit { public void plant(); public void harvest(); public void grow(); } package cn.xhl.interfacemodel; public class ..

zero_ko的博客 2502
上一篇: 结构型——装饰器(Decorator)day09
下一篇: 网络安全笔记
哆唻咪à
博客等级 码龄9年 0粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值