Java设计模式之组合模式(Composite Pattern)

组合模式(Composite Pattern) 是一种 结构型设计模式,用于将对象组合成树形结构以表示 “部分-整体” 的层次关系。它使得客户端可以 统一处理单个对象和组合对象,无需关心具体是叶子节点还是容器节点。

1. 核心角色

角色说明
组件接口(Component)定义所有对象的通用接口(叶子节点和容器节点的共同行为)。
叶子节点(Leaf)实现组件接口,表示树中的叶子对象(没有子节点)。
容器节点(Composite)实现组件接口,包含子组件集合,并提供管理子组件的方法(如添加、删除)。

2. 代码示例:文件系统

模拟文件系统中的文件和文件夹结构,文件夹可以包含文件或其他文件夹。


步骤1:定义组件接口(FileSystemComponent)
步骤2:实现叶子节点(File)
步骤3:实现容器节点(Directory)
步骤4:客户端调用

输出结果

3. 组合模式类图

4. 组合模式优缺点

优点缺点
简化客户端代码,统一处理叶子与容器。违反接口隔离原则(叶子节点被迫实现无关方法,如add())。
灵活扩展,新增组件类型不影响现有代码。设计较复杂,需区分叶子与容器节点。

5. 组合模式 vs. 装饰器模式

模式目的结构
组合模式处理树形结构,统一叶子与容器操作。树形层次结构,包含子节点。
装饰器模式动态添加对象功能,增强原有行为。链式结构,包裹被装饰对象。

6. 实际应用场景

  1. GUI 组件树:如 Java Swing 中的 JComponent(容器)和 JButton(叶子)。

  2. 组织结构管理:公司部门与员工的关系。

  3. XML/JSON 解析:处理嵌套的节点结构。

  4. 菜单系统:支持多级菜单项和子菜单。


总结

组合模式通过 树形结构 和 统一的组件接口,实现了对单个对象和组合对象的一致性处理。适用于需要表示 部分-整体层次结构 的场景,能够显著提升代码的 可扩展性 和 可维护性。实际开发中需注意避免叶子节点被迫实现冗余方法(可通过接口分离优化)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值