Composite - 组合模式 发表于 2026-03-14 分类于 Java , 设计模式 , 结构型模式 Composite-组合模式 Why 无论是“部门”还是“员工”,它们都应该能执行相同的操作,例如: 打印信息 计算总工资 统计人数 但是: 部门下面可以有子节点; 员工就不能再包含别的节点。 问题就来了:我们希望客户端不必区分“是部门还是员工”,都能统一调用。 这时就需要——组合模式。 组合模式让你操作单个对象与组合对象时不再做区分, 树形结构 + 统一接口 + 递归调用 = 万物皆节点。 主要角色 核心 “以统一接口的代价,换取结构操作的统一性。” In my word 让抽象组件有叶子节点和容器节点的并集属性, 然后让他们两个实现抽象组件, 并且只重写需要的方法 (这里好像违背了接口隔离,员工继承了不需要的add类,根据你的代码解决方法好像是抛出异常),然后就用多态来实现不区分节点还是容器的操作了 ✅ 统一性 > 接口纯洁性 ✅ 可递归结构 > 严格职责分离 组合模式的核心思想是 ——让单个对象(叶子)和组合对象(容器)在结构上具有一致性。 也就是说,通过在抽象组件中同时定义“叶子行为”和“组合行为”, 容器节点重写组合相关方法(如 add()、remove()), 叶子节点只实现自身行为(不需要的可抛异常)。 这样,客户端就能用同一套接口去操作树形结构中的任意节点,而无需区分它是叶子还是组合。 两种模式 优点