首页/开发/代码质量与评审速查/组合模式 Composite(结构型)
设计原则与模式62 条

组合模式 Composite(结构型)

让「单个对象」与「组合对象」拥有一致的接口:树形结构(文件系统、组织架构、UI 容器)中调用方无需区分叶子与分支;注意约束可组合操作。

意图树形结构的一致访问
角色Component(统一接口)/ Leaf / Composite
场景目录树、权限树、菜单、报表分组

Java 示例

Java 示例
interface Node { long size(); }
class File implements Node { public long size() { return bytes; } }
class Dir implements Node {
    private final List<Node> children = new ArrayList<>();
    public long size() { return children.stream().mapToLong(Node::size).sum(); }
}

易错点

  • 叶子对象被迫实现增删子节点方法:接口不诚实
  • 递归遍历无深度限制:退化链或环导致栈溢出

数据来源与参考

  • 《设计模式》(GoF)· Composite
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌