Java设计模式:组合模式的介绍及代码演示

简介: 组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。

组合模式介绍

组合模式属于结构型设计模式,可以使用这种设计模式将多个对象组合成树形结构,树中的每个对象都表示一个叶子结点,并且可以统一处理结构中的所有叶子结点。比如说,现在要统计一个企业中的总人数,首先要统计各个部门的人数,然后再将统计的结果求和得到公司的总人数,如下图所示:

上图中,公司部分和各个部门结点组成了树状结构,因为每个结点都是由对象组成,所以可以实现对整个树的统一处理,接下来就使用代码去实现。

组合模式示例代码

组合模式,包含一个可以统一处理所有对象的通用接口、一个表示结点中对象的类,以及一个实现了统一处理接口的具体类

创建一个所有对象的通用接口

java

代码解读

复制代码

/**
 * 统计人数接口
 *
 */
public interface NumberOfPeople {
	//总人数
	int count();
}

接口中包含一个代表单个部门人数的抽象方法

创建表示节点的类

java

代码解读

复制代码

/**
 * 代表各个部门的类
 */
public class Department implements NumberOfPeople{
	//部门人数
	private int count;
	//部门名称
	private String name;
	
	public Department(String name,int count) {
		this.count = count;
		this.name = name;
	}
	
	@Override
	public int count() {
		return count;
	}
}

在这里,各个节点就是各个部门,所以创建一个表示部门的类,类中包含表示人数和部门名称的属性,count()方法用来返回部门的人数。接下来,要创建树形结构的统一处理实现类。

创建统一处理实现类

java

代码解读

复制代码

/**
 * 树的统一处理类
 */
public class CountImpl implements NumberOfPeople{
	private List<NumberOfPeople> list = new ArrayList<>();
	
	public void insert(NumberOfPeople param) {
		list.add(param);
	}
	/**
	 * 求公司的总人数
	 */
	@Override
	public int count() {
		int count = list.stream().collect(Collectors.summingInt(v -> v.count()));
		return count;
	}
}

提示

统一处理实现类中,包含一个List集合,存放了所有的部门信息,因为组合模式是一个树结构,所以List存放的对象也等于所有的子节点。在这个类中,包含一个insert方法,用来将各个节点对象添加到集合中去,最后通过重写的count()方法统一汇总各个节点中的部门人数。最终实现公司总人数的统计。

代码测试

java

代码解读

复制代码

public class test_01 {
	public static void main(String[] args) {
		CountImpl target = new CountImpl();
		target.insert(new Department("IT部", 20));
		target.insert(new Department("人事部", 3));
		target.insert(new Department("销售部", 10));
		int count = target.count();
		System.out.println("公司总人数:"+count);
	}
}

运行结果:

通过组合模式的树形数据结构、树中结点的通用方法以及自定义的树结构统一处理方法,实现了公司总人数的统计。

总结

上面的示例代码,实现了统计一个公司的总人数,假如不使用这种设计模式,而是采用硬编码的办法去实现,无疑会增加代码的复杂度和代码的耦合。而采用组合模式,则可以先让各个组成部分通过通用的方法先去解决最小单位的问题,再通过统一的处理方法将各个节点的处理结果进行汇总,处理问题的方式更结构化。并且,组合模式的树形结构由各个节点组成,这些节点可以自由的添加或者删除,使得程序更易于扩展和维护。


转载来源:https://juejin.cn/post/7412813777559371787

相关文章
|
1月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
30天前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
50 0
|
2月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
|
18天前
|
人工智能 前端开发 Java
Java 面试资料中相关代码使用方法与组件封装方法解析
这是一份详尽的Java面试资料代码指南,涵盖使用方法与组件封装技巧。内容包括环境准备(JDK 8+、Maven/Gradle)、核心类示例(问题管理、学习进度跟踪)、Web应用部署(Spring Boot、前端框架)、单元测试及API封装。通过问题库管理、数据访问组件、学习进度服务和REST接口等模块化设计,帮助开发者高效组织与复用功能,同时支持扩展如用户认证、AI推荐等功能。适用于Java核心技术学习与面试备考,提升编程与设计能力。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
50 6
Java 面试资料中相关代码使用方法与组件封装方法解析
|
4月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
277 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
1月前
|
设计模式 Java 定位技术
【设计模式】【结构型模式】组合模式(Composite)
一、入门 什么是组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式使得客户端可以统一处理单个对象和组合对
67 10
|
3月前
|
消息中间件 Java 应用服务中间件
JVM实战—1.Java代码的运行原理
本文介绍了Java代码的运行机制、JVM类加载机制、JVM内存区域及其作用、垃圾回收机制,并汇总了一些常见问题。
JVM实战—1.Java代码的运行原理
|
3月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
3月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
143 5
|
1月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
79 16