【设计模式】结构型05组合模式(Composite Pattern)

Solidworks转URDF避坑实录:从履带机器人到ROS仿真的完整配置流程 本文详细介绍了将Solidworks履带机器人模型转换为URDF格式并配置ROS仿真的完整流程,重点解析了坐标系设置、复杂关节定义、插件配置等关键步骤中的常见问题与解决方案,帮助开发者高效实现履带机器人在RVIZ和Gazebo中的精确仿真。 阅读详情

组合模式(Composite Pattern)

意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

何时使用:1、您想表示对象的部分-整体层次结构(树形结构)。2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。

关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。



类图:这里从类图可以很好的理解,恩,复习的时候再画用于深化~

代码:这里我使用了四人帮《java设计模式》一书中的经典例子做演示,简化了一些内容,以便理解其核心-结构


1、组合接口

package com.pat.composite;
/**
 * 组合类接口,普通叶子和含有很多叶子的枝干都实现本接口
 * @author ZX
 *
 */
public interface Composite {
	void operation();
	void add(Composite leaf);
	void remove();

}

2、单独的实现类-叶子、

package com.pat.composite;
/**
 * 绿色的树叶
 * @author ZX
 *
 */
public class GreenLeaf implements Composite{
	@Override
	public void operation() {
		System.out.println("摘一片绿叶");
		
	}
	@Override
	public void add(Composite leaf) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void remove() {
		// TODO Auto-generated method stub
		
	}

}
package com.pat.composite;
/**
 * 黄色的树叶
 * @author ZX
 */
public class YellowLeaf implements Composite{
	@Override
	public void operation() {
		System.out.println("摘一片黄叶");
	}

	@Override
	public void add(Composite leaf) {
	}
	@Override
	public void remove() {
	}
}

3、枝干实现类-枝干上有许多叶子:

package com.pat.composite;

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

/**
 * 树枝,上面有很多树叶
 * @author ZX
 *
 */
public class Branch implements Composite{
	//树枝上所有的叶子集合
	List<Composite> leafs = new ArrayList<>();
	@Override
	public void operation() {
		operateAll();	
	}
	@Override
	public void add(Composite leaf) {
	}
	@Override
	public void remove() {
	}
	public void operateAll() {
		for(Composite leaf:leafs) {
			leaf.operation();
		}
		
	}
	//后早方法
	public Branch() {
		//这里我简单添加了一些树叶类,未使用传入参数,核心不在于此
		leafs.add(new GreenLeaf());
		leafs.add(new GreenLeaf());
		leafs.add(new GreenLeaf());
		leafs.add(new YellowLeaf());
		leafs.add(new YellowLeaf());
		leafs.add(new YellowLeaf());
	}

}

4、测试类:

package com.pat.composite;

public class Test {
	public static void main(String[] args) {
		System.out.println("===========================");
		Composite green = new GreenLeaf();
		green.operation();
		System.out.println("===========================");
		Composite yellow = new YellowLeaf();
		yellow.operation();
		System.out.println("===========================");
		Composite branch = new Branch();
		branch.operation();
		System.out.println("===========================");
	}
}
5、结果:
===========================
摘一片绿叶
===========================
摘一片黄叶
===========================
摘一片绿叶
摘一片绿叶
摘一片绿叶
摘一片黄叶
摘一片黄叶
摘一片黄叶
===========================


RK3588内核崩溃日志捕获:pstore与ramoops的实战配置指南 本文详细介绍了在RK3588嵌入式设备上配置pstore与ramoops以捕获内核崩溃日志的实战指南。通过内核配置调整、设备树设置及高级调试技巧,帮助开发者有效定位系统崩溃原因,特别适合户外智能设备等无法长期连接调试器的场景。文章还提供了生产环境优化建议,确保日志捕获的可靠性与安全性。 阅读详情

相关推荐

Lumerical FDTD新手教程:5步搞定MMI波导光谱模拟(附避坑指南)

本文提供Lumerical FDTD新手教程,详细讲解5步完成MMI波导光谱模拟的实用方法,包括环境准备、结构建模、光源配置、仿真优化和结果分析。特别针对多模干涉耦合器(MMI)的模拟难点,提供避坑指南和优化策略,帮助光学工程师快速掌握FDTD仿真技术。

kite3的博客 359

突破编程:C++中的组合模式(Composite Pattern)

首先,我们定义一个组件接口(Component),它包含一个纯虚函数,用于执行某些操作(如显示)。public:// 纯虚函数,定义操作接口// 可以添加其他公共接口,如添加、删除子组件等(这里为了简化省略)

Chujun123528的博客 1021

信捷CODESYS平台伺服电机转矩控制模式应用与切换

信捷CODESYS二次开发软件:XS Studio 在运动控制中的转矩控制案例

weixin_64614866的博客 1万+

设计模式 - 组合模式(Composite Pattern)

组合模式(Composite Pattern)是一种结构型设计模式,它将对象组织成树形结构,以表示“部分-整体”的层次结构。组合模式使得客户端可以一致地处理单个对象和对象组合。此模式特别适合用于处理树形结构的问题,如文件系统、GUI 组件等。

二分掌柜的 2986

W25N01GV SPI NAND Flash驱动开发避坑指南:详解2KB缓冲区机制与状态寄存器正确用法

本文深入解析W25N01GV SPI NAND Flash芯片的2KB缓冲区机制与状态寄存器正确用法,提供STM32 HAL和ESP-IDF项目的实战解决方案。涵盖双阶段操作原理、状态寄存器深度解析、时序控制优化及跨平台驱动设计要点,帮助开发者避免常见错误并提升存储性能。

aizhouqian5537的博客 640

PointNetLK实战:5步搞定点云配准(附ModelNet40数据集训练技巧)

本文提供了一份详细的PointNetLK实战指南,帮助读者在5步内掌握点云配准技术。文章以ModelNet40数据集为例,深入讲解了环境搭建、数据预处理、模型训练与调试等核心步骤,并分享了关键的训练技巧和调参策略,旨在让开发者快速实现并应用这一高效的深度学习配准方法。

wind6的博客 462

Java GoF 23种设计模式-结构型模式-组合模式(Composite Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 二、模式动机 三、模式结构 四、代码实现 角色 类 Target:目标抽象类 Calculator.java Adaptee:适配者类 CalculatorAdaptee.java Adapter:适配器类 CalculatorAdapter.java Client:客户类 Client.java ...

WU4566285的博客 489

【AirSim+PX4】WSL2上运行PX4连接Airsim步骤

在 Linux 命令行中输入以下命令以添加(或改变)环境变量。注意,此处的 IP 地址应为。4.启动 sln 文件的调试以进入 UE4 编辑器,并在 Linux 中启动 PX4。

m0_53538421的博客 1505

组合模式

一、简介 组合模式,Composite Pattern ,又称为部分整体模式,表述了一种“整体-部分”的层次关系。 其依据树形结构来组合对象,用来表示部分和整体,使得用户对单个对象和组合对象具有一致的访问处理方式。属于结构型模式。 二、类图 说明: 1)Component: 组合中对象声明接口或抽象类,用于访问和管理Component子部件,实现所有类共有的接口默认行为。 **2)Leaf: ** 在组合中表示叶子节点,叶子节点没有子节点。 3)Composite: 非叶子节点,用于存储子部件,在Comp

晶谛-giserDev 287

Modbus协议全家桶(C#纯原生完整版):ModbusRTU + ModbusTCP + ModbusASCII 协议规范+完整封装+工业级实战

你已经掌握了C#串口/网口原生核心API和工业通信协议本质,而今天的主角Modbus协议,是工业通信领域绝对的王者、通用的标准、入门的必修课,没有之一。凡是做工业通信开发,必会Modbus协议;市面上99%的工业设备(PLC、变频器、温控仪、传感器、流量计、扫码枪)都原生支持Modbus协议。Modbus协议不是单一协议,而是一个「协议家族」,我们常说的就是这个家族的三大核心成员,也是工业现场的全部Modbus应用形态。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 565

【NVIDIA】Jetson Orin Nano系列:烧写Ubuntu22.04

Jeson Orin Nano系列:烧写Ubuntu22.04 电脑主机可以是Ubuntu20.04

郭老二 4896

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

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

2401_84562251的博客 1058

把 ABAP writable CDS view entity 讲透:从只读建模到可写模型的 ABAP CDS 新能力

摘要:SAP引入的writable CDS view entity突破了传统CDS视图只读的限制,允许通过ABAP SQL直接进行数据修改。该特性通过WRITABLE关键字定义,使CDS视图成为与数据库表同等级别的可写对象。其核心价值在于为数据集成、中间层同步等场景提供结构化写入入口,但需注意不应绕过业务规则。最佳实践建议保持底层表结构简单映射,避免复杂变形。这一特性标志着CDS从单纯消费模型向双向数据交互能力的演进,为ABAP开发提供了新的数据边界设计思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1313

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

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

biangu1486的博客 360

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

head first Design Pattern Iterator & Composite

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。将遍历聚合的工作封装进一个对象中,依赖聚合提供遍历。Java5 all the collections has add travel method, so you don't need require Iterator to travel all the elements.使用for(MenuItem item: ...

weixin_30784945的博客 128

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

测试类图Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现...

在改章节中,我们主要介绍测试类图的内容,自我感觉有个不错的建议和大家分享下 迭代器模式供提一种方法序顺问访一个聚合对象中的各个素元,而又不露暴其部内的示表。 计设准则: 单一任责准则:一个类应当只有一个引发化变的原因 源代码链接 图类: 测试结果: 每日一道理 冰心说道:“爱在左,同情在右,...

weixin_30416871的博客 104

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

composite模式 透明和安全

组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 使用场景: 1、用于对象的部分-整体层次结构,如树形菜单、文件夹菜单、部门组织架构图等; 2、对用户隐藏组合对象与单个对象的不同,使得用户统一地使用组合结构中的所有对象。 通用类图:   说到树,“数据结构”这门课上都学习过

Xiao 583

00.设计模式导读

经典的设计模式一般分为23中,分别如下 1、  策略模式    【STRATEGY PATTERN】 2、  代理模式    【PROXY PATTERN】 3   章  单例模式    【SINGLETON PATTERN】 第  4   章  多例模式    【MULTITION PATTERN】 第  5   章  工厂方法模式【FACTORY METHOD PATTERN】 第

技术小弟 432

23个设计模式一文搞懂

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

weixin_72753562的博客 803

C++策略模式实战:金融交易系统设计与优化

策略模式是面向对象编程中常用的行为设计模式,它通过定义算法族并封装每个算法,使它们可以相互替换。这种模式的核心价值在于将算法与使用算法的客户端解耦,使得算法可以独立于客户端而变化。在C++开发中,策略模式特别适合需要动态切换行为的场景,如金融交易系统中的交易策略切换。通过抽象策略接口和具体策略实现,配合上下文类管理策略引用,开发者可以构建灵活可扩展的系统架构。现代C++特性如std::function、lambda表达式和variant进一步简化了策略模式的实现。在金融科技、游戏AI等高性能计算领域,策略模

深未来技术 381

策略模式详解:支付系统架构中的算法封装与动态切换实践

策略模式作为行为设计模式的核心概念,通过定义算法族并分别封装,实现了算法的独立变化与灵活替换。其原理基于面向接口编程,将具体算法实现与使用场景解耦,从而提升代码的可维护性和扩展性。在技术价值层面,策略模式有效消除了复杂的条件判断语句,支持运行时动态切换算法,符合开闭原则。典型的应用场景包括支付系统中的多种支付方式、排序算法的不同实现、数据验证规则等工程实践。本文聚焦支付系统架构,通过信用卡支付、PayPal支付和加密货币支付等具体策略实现,结合工厂模式和缓存优化,展示了如何在实际项目中运用策略模式解决复杂业

weixin_33795093的博客 480

【设计模式】行为型02模板方法模式(Template Method Patten)

    五一长假,没有出去,不喜欢嘈杂的人群,玩了会游戏发泄了下憋在心底的戾气,手旁大马克杯里是母亲泡的绿茶。点开自己的播放列表,耳机里传来的是理查德克莱德曼的致爱丽丝。自己是个凡人,卑微渺小的活着。不说废话了,搞起:    模板方法模式是一种行为型模式,原理比较简单,就是对多态的一种应用,自己也在无意识中使用过很多次,看书时才意识到这种方式被总结为设计模式。    首先说说我自己的理解:模板方法...

the_fool_的博客 942

【设计模式】【一】创建型模式总结

前文提到,设计模式大致分为创建型、结构型、以及行为型三个大类。 而创建型模式、多为更合理的创建对象而设计,由于J2EE中对象的创建多为Spring管理,所以实际开发中使用的并不多。当然不包括造轮子的大牛们。 于此,简单总结了创建型模式的应用场景以及简单示例,欢迎指点: 一、单例模式 简介:顾名思义,单例模式(singleton pattern)保证一...

the_fool_的博客 871

【设计模式】行为型01策略模式(strategy patten)

     学设计模式一段时间了,有些懂了,有些半知半解,通过写笔记博客的方式总结一下:     关于策略模式,我的个人理解就是将一些经常变动的算法独立抽取出来,可以是一个方法,也可以是一个策略类,这样,如果有需求变更,只需要添加新的策略类然后进行调用切换即可。     虽然个人使用时一般是抽取为方法,但是以面向对象的角度以及书上的类图来看,采用策略类比较符合面向对象的思想。当然也不必墨守成规,灵活...

the_fool_的博客 838

【设计模式】【总】设计模式分类与原则概括

简要设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。总体来说设计模式分为三大类:分类创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模...

the_fool_的博客 828
上一篇: 【设计模式】结构型04桥接模式(Bridge Pattern)
下一篇: 【设计模式】结构型06享元模式(Flyweight Pattern)
「已注销」
博客等级 码龄11年 199粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值