8、组合模式

 组合模式

1、组合模式

组合模式属于对象中的结构模式,有时又叫做部分-整体模式。合成模式是将部分和整体的关系用树结构表示出来。

2、结构

 

 

以上类图结构涉及三种角色:

抽象构件角色:这是一个抽象角色,它给参加组合的对象规定一个接口,这个角色给出共有的接口和默认行为。

树叶构件角色:代表参加组合的树叶对象。

树枝构件角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。

 

3、代码

以下是描述一个公司层次结构的实例

抽象构件角色company

public abstract class Company {
	
	public Company() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Company(String name, int dep) {
		super();
		this.name = name;
		this.dep = dep;
	}

	private String name;
	
	private int dep = 0;
	
	public Company add(Company company){
		
		return this;
	}
	
	public Company remove(Company company){
		
		return this;
	}
	
	public void operate(){
		for(int i = 0; i < dep; i++){
			System.out.print("-");
		}
		System.out.println(this.name);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getDep() {
		return dep;
	}

	public void setDep(int dep) {
		this.dep = dep;
	}
	
	public abstract List<Company> getComposite();
	
}

 

树叶构件角色LeafCompany

public class LeafCompany extends Company {
	
	public LeafCompany() {
		super();
	}

	public LeafCompany(String name, int dep) {
		super(name, dep);
	}

	@Override
	public List<Company> getComposite() {
		return null;
	}

}

 

树枝就、构件角色CompositeCompany

public class CompositeCompany extends Company {

	private List<Company> composite = new ArrayList<Company>();
	
	public CompositeCompany(String name, int dep) {
		super();
		this.setName(name);
		this.setDep(dep);
	}
	
	public CompositeCompany(String name) {
		super();
		this.setName(name);
	}

	@Override
	public Company add(Company company) {
		if(company.getDep() == 0){
			company.setDep(this.getDep()+1);
		}
		composite.add(company);
		return super.add(company);
	}

	@Override
	public Company remove(Company company) {
		composite.remove(company);
		return super.remove(company);
	}

	@Override
	public void operate() {
		display(this);
	}

	private void display(Company company){
		out(company);
		if(company.getComposite() != null && company.getComposite() .size() != 0){
			for(int i = 0; i < company.getComposite().size(); i++){
				display(company.getComposite().get(i));
			}
		}
	}
	
	private void out(Company company){
		for(int i = 0; i < company.getDep(); i++){
			System.out.print("-");
		}
		System.out.println(company.getName()+"("+company.getDep()+")");
	}

	public List<Company> getComposite() {
		return composite;
	}

	public void setComposite(List<Company> composite) {
		this.composite = composite;
	}
	
	
}

 

 

客户端测试程序Client

public class Client {
	
	public static void main(String[] args) {
		
		Company root = new CompositeCompany("北京总部",0);
		
		CompositeCompany child1 = new CompositeCompany("杭州分部",1);
//		CompositeCompany child11 = new CompositeCompany("杭州分部1",2);
		Company child11 = new LeafCompany("杭州分部1",2);
		
		CompositeCompany child2 = new CompositeCompany("上海分部",1);
//		CompositeCompany child21 = new CompositeCompany("上海分部1",2);
		Company child21 = new LeafCompany("上海分部1",2);
		
		
		child1.add(child11);
		child2.add(child21);
		root.add(child1);
		root.add(child2);
		
		
		root.operate();
	}

}

 

 

4、总结

 

组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以向处理简单元素一样来处理复杂元素。

 

如果你想要创建层次结构,并可以在其中以相同的方式对待所有元素,那么组合模式就是最理想的选择。本章使用了一个文件系统的例子来举例说明了组合模式的用途。在这个例子中,文件和目录都执行相同的接口,这是组合模式的关键。通过执行相同的接口,你就可以用相同的方式对待文件和目录,从而实现将文件或者目录储存为目录的子级元素。
从注册到投稿:一步步教你完成KBS期刊的在线投稿流程(最新版) 本文详细介绍了如何完成KBS期刊的在线投稿流程,从账号注册到最终提交的全过程。特别针对初次使用Elsevier投稿系统的研究者,提供最新版系统的操作指南,包括投稿要求、文件格式、作者信息管理等关键步骤,帮助研究者顺利投稿至这一人工智能领域的知名期刊。 阅读详情

相关推荐

Docker容器化部署Ceph集群:从零搭建高可用分布式存储

本文详细介绍了如何使用Docker容器化部署Ceph集群,从零搭建高可用分布式存储系统。通过环境一致性、快速扩容和资源隔离等优势,Docker显著提升了Ceph集群的部署效率和运维便捷性。文章涵盖硬件规划、镜像选择、单节点部署、多节点扩展及性能调优等实战内容,帮助开发者快速掌握分布式存储系统的容器化部署技巧。

weixin_29081101的博客 422

Java设计模式-组合模式

一、概述 组合模式,又叫部分整体模式,属于结构型模式,它创建了对象组的属性结构,将对象组合成树状结构以表示“整体-部分”的层次关系。组合模式可以不提供父对象的管理方法,但是组合模式必须在合适的地方提供子对象的管理方法,例如:add(),remove()以及getChild()等。组合模式的实现根据所实现接口的区别分为安全式和透明式。 二、角色 抽象构件(Component):定义参加组合对象...

Luck_ZZ的博客 367

VLA强化学习训练:π0到π0.5的技术优化与实现

视觉语言动作模型(VLA)作为多模态强化学习的重要分支,通过融合视觉、语言和环境状态数据实现智能决策。其核心技术在于多模态特征融合与动作空间设计,其中PPO算法因其出色的训练稳定性成为首选方案。在工程实践中,延迟补偿机制和课程学习设计能显著提升模型性能,如在四足机器人项目中使避障成功率提升47%。针对实际部署中的性能下降问题,需要特别关注硬件量化参数和控制频率一致性等关键因素。本文通过π0与π0.5版本的对比实验,详细解析了VLA模型在机械臂控制等具身智能场景中的优化路径。

weixin_29041767的博客 246

组合模式

把部分和整体的关系用树形结构来表示,从而使客户端可以使用同一的方式处理部分对象和整体对象

绣花针 188

操作系统头歌 课后作业3.3.2:进程的调度

请问:从 6 号进程刚创建完 7 号进程开始,在接下来的 9 次进程调度中,每次调度时,6 号和 7 号进程的剩余时间片是多少?请问:从 6 号进程刚创建完 7 号进程开始,在接下来的 9 次进程调度中,每次调度时,6 号和 7 号进程的剩余时间片是多少?根据相关知识回答当程序 01.c 运行时(在版本 0 内核中),会在父子两个进程(假设分别为 6 号和 7 号进程)中分别输出字符串。当程序 01.c 运行时(在版本 0 内核中),会在父子两个进程(假设分别为 6 号和 7 号进程)中分别输出字符串。

weixin_73255571的博客 4732

STM32H743玩转以太网:不用FreeRTOS,手把手搞定LAN8742和DHCP(附MPU配置避坑指南)

本文详细介绍了在STM32H743裸机环境下实现以太网通信的完整方案,重点讲解了LAN8742 PHY芯片的配置和DHCP自动获取IP的实现。通过CubeMX配置、内存布局优化和MPU设置,避开了H7系列常见的Cache陷阱,提供了无操作系统环境下的高效网络通信解决方案。

weixin_42709044的博客 201

1.8 组合模式(Composite Pattern)

组合模式(Composite Pattern) 是一种结构型设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式让客户端可以以相同的方式对待单个对象和对象集合。组合模式使得客户可以统一处理树形结构中的单个对象和对象的集合,简化了对象的使用和管理。// 组件接口:部门和员工的共同接口public:// 显示信息IComponent 是所有部门和员工的公共接口,声明了 showInfo() 方法,用于展示信息。

Tiantangbujimo7的博客 1225

[TI板]MSPM0G3507——keil环境配置+烧录配置+vscode配置+空工程迁移+点灯+芯片解锁教程

本文介绍了MSPM0G3507开发环境的配置与烧录方法。主要内容包括:1)下载安装芯片支持包和SDK开发工具;2)通过串口或DAPLink两种方式实现程序烧录,详细说明了UniFlash软件的使用步骤和常见问题解决方法;3)简要提及工程迁移和LED点灯等基础操作。文章提供了完整的开发环境搭建指南,涵盖从软件安装到实际烧录的全过程,并附有相关工具下载链接和操作截图,帮助开发者快速上手MSPM0G3507开发。

qq_23220445的博客 1万+

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

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

在未来等你的专栏 486

FastAPI + LLM 实战:5分钟搞定本地模型API服务部署(含避坑指南)

本文详细介绍了如何使用FastAPI和LLM(大语言模型)快速部署本地API服务,涵盖环境准备、模型集成、性能优化及避坑指南。通过实战示例,帮助开发者在5分钟内完成从零到生产的部署过程,提升AI应用开发效率。

weixin_29062963的博客 105

4、高级认证解决方案:Active Directory、LDAP、RADIUS和TACACS+深度解析

本文深入解析了多种高级认证解决方案,包括Active Directory、标准LDAP、RADIUS和TACACS+,涵盖其技术优势、配置步骤及适用场景。同时介绍了如何实现通用用户管理,包括使用第三方认证解决方案和ADSI自助用户管理。通过实际案例部署,展示了如何高效、安全地管理大规模用户认证与权限控制,为企业安全架构提供参考。

o4p5q6r7s的博客 306

二十三种设计模式[8] - 组合模式(Composite Pattern)

前言 组合模式,类结构模式的一种。在《设计模式 - 可复用的面向对象软件》一书中将之描述为“ 将对象组合成树状结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性 ”。 工作中我们经常会接触到一个对象中包含0个或多个其它对象,而其它对象依然包含0个或多个其它对象,这种结构我们称之为树状结构。组合模式就是通过递归去帮助我们去管理这类树状结...

weixin_30629977的博客 104

第三篇:NVIDIA cuOpt Python API 详解:LP、QP、MILP 建模与求解,附核心术语名词解释

NVIDIA cuOpt是一款GPU加速的优化求解库,支持LP、QP、MILP和路径优化问题。本文详细介绍了其Python API使用方法,包括核心类Problem的变量定义、约束添加、目标设置和求解配置,并提供了术语解释。cuOpt通过GPU并行计算大幅提升大规模优化问题的求解效率,支持多种求解算法和参数配置,适用于需要高性能计算的优化场景。安装方式包含pip和Docker两种,验证安装后即可快速开始建模求解。

算法工程师 236

23种设计模式-8.组合模式(Composite Pattern)

动机(Motivate):     组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 意图(Intent):     将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。

xingcangzaiwo的专栏 460

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

8 组合模式:

8 组合模式: I.针对的是树形结构,为了统一叶子节点和分支节点 II.将对象组合成树形结构来体现 部分-整体的层次关系,使用户一致的使用组合对象和单个对象 分支节点:包含其他对象的为组对象,也叫组节点|分支节点; 叶子节点:不包含其他对象的为终点对象,也叫叶子节点; 根节点 : 第一个节点 ...

one_chao的博客 126

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

8.组合模式

组合模式 一、应用实例 编写程序展示一个学校院系结构:要在一个页面中展示学校的院系组成,一个学校有多个学院,一个学院有多个系。 二、组合模式(Composite Pattern) 1.基本介绍 1)组合模式,又叫部分整体模式,将对象组合成树状结构。 2)组合模式使用户对单个对象和组合对象的访问具有一致性 2.原理类图 1)Component:这是组合中对象声明接口,在适当情况下,实现所...

weixin_30835923的博客 71

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Chapter8—组合模式

组合模式摘要 组合模式是一种结构型设计模式,用于将对象组织成树形结构以表示"部分-整体"的层次关系。该模式通过统一对待单个对象和组合对象,使客户端代码可以一致地处理简单和复杂元素。 核心组件包括: 组件接口(Component) - 定义所有节点的通用操作 复合组件(Composite) - 包含子组件的容器节点 叶端组件(Leaf) - 不含子节点的终端元素 典型应用场景包括文件系统、UI组件等树形结构。模式优势在于简化客户端代码、支持递归组合和灵活添加新组件类型。示例展示了文件夹/文

LoveXming的博客 767

[设计模式8]组合模式

目录 1,基本介绍: 2,组合模式的注意事项和细节 2.1 优点 2.2 缺点 3,模式的结构 3.1 透明方式 3.2 安全方式 4,模式实现: 4.1 透明组合模式 4.2 安全组合模式 5,组合模式应用实例: 6,组合模式在java HashMap源码中的应用 1,基本介绍: 1) 组合模式(Composite Pattern),又叫部分整体模式,它是一种将对象组合成树状的层次结构的模式,将对象组合成树状结构以表示“整体-部分”的层次关系。 2) 组合模式依据树...

weixin_38602383的博客 259

设计模式8组合模式

组合模式(composite) 使用组合模式的场景: 把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。 组合模式核心: 抽象构件(Component)角色: 定义了叶子和容器构件的共同点 叶子(Leaf)构件角色:无子节点 容器(Composite)构件角色: 有容器特征,可以包含子节点 抽象组件 叶子节点 容器组件 有一个聚合的关系 组合模式工作...

AthlenaA的博客 374

设计模式 8 组合模式

组合模式通过定义树形结构来组成对象,使得客户端对单个对象和对象集合的处理方式一致。这个模式让你可以使用相同的接口来操作单一对象和对象集合,简化了代码和操作逻辑。

Winemonk 1214

设计模式8——组合模式

1.生活实例 组合模式首先想到的就是树形结构,比如我们常用的文件结构,请看Windows的文件结构: 无论是文件或者是文件夹,常用操作都是一致的,比如:复制、粘贴、剪切、删除、所占空间大小。我们并没有刻意的去分他是文件夹还是文件。 我们可以把文件夹看成是组合对象,把每一个文件看成是单个对象。组合模式模糊了这两个概念,他使得客户端能够用简单一致的操作来操作两个不同的东西。 2.定义解

记得抬头看路哦 1090

Java学习之路8--组合模式(模拟树状文件杀毒)

Java学习之路8--组合模式什么是组合模式组合模式的实现总结 什么是组合模式 组合模式由Component(抽象构件)、Leaf(叶子构件)、Composite(容器构件)3部分组成的。 组合模式的实现 文件抽象类: public abstract class File { public abstract void add(File file)throws LeafException; public abstract File getChild(int i)throws LeafException

dotbs的博客 266

python设计模式8-组合模式

1. 组合模式(Composite)介绍 UML类图 角色介绍 Component:为组合模式中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为,声明一个接口用于访问和管理其子组件;在递归结构中定义一个接口,用于访问一个父组件,并在合适的情况下实现。 Leaf:在组合模式中表示叶节点对象,叶节点对象没有子节点,实现 Component 的所有方法。 Composite:表示组合部件(注意部件带有子部件),实现操纵子部件的所有方法;实现所有在 Component 的操作。 Client:通过

rayylee 991

设计模式——8.组合模式 composite

使用组合模式的场景: – 把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。 组合模式核心: – 抽象构件(Component)角色: 定义了叶子和容器构件的共同点 – 叶子(Leaf)构件角色:无子节点 – 容器(Composite)构件角色: 有容器特征,可以包含子节点 组合模式工作流程分析: – 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组 合,使得用户在使用时可以一致性的对待容器和叶子。 – 当容器对象的指定方法被调用时,将遍

White 183

8.结构型-组合模式

1.组合模式介绍 a.组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。 b.组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 c.这种类型的设计模式属于结构型模式。 d.组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象 2.原理类图 a. Component :这是组合中对象声明接口,在适当情况下,实现所有类共有的接口默认行为,用于访问和管理C

我是60岁程序员 224

设计模式(8)-组合模式

组合模式(Composite Pattern):组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式。

潘威威的博客 1246
上一篇: 7、桥梁模式
下一篇: 9、装饰模式
wangmuduxingxia2
博客等级 码龄17年 0粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值