温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java组合模式是什么

发布时间:2026-09-14 16:12:50 来源:亿速云 阅读:82 作者:小樊 栏目:编程语言

Java 组合模式(Composite Pattern)结构型设计模式 的一种,主要用于处理树形结构(整体-部分关系),让单个对象(叶子)组合对象(容器) 在使用时具有一致性


一、核心思想

让客户端可以统一对待“单个对象”和“对象集合”

  • 叶子节点:没有子节点
  • 容器节点:可以包含叶子或其他容器
  • 它们实现同一个接口或抽象类

二、适用场景

✅ 菜单 / 文件目录
✅ UI 组件树
✅ 组织结构(部门 + 员工)
✅ 任何“部分-整体”的层级结构


三、组合模式结构

1️⃣ 抽象组件(Component)

定义叶子 and 容器共有的方法

public abstract class Component {
    public void add(Component c) {
        throw new UnsupportedOperationException();
    }

    public void remove(Component c) {
        throw new UnsupportedOperationException();
    }

    public abstract void operation();
}

2️⃣ 叶子节点(Leaf)

不能有子节点

public class Leaf extends Component {
    @Override
    public void operation() {
        System.out.println("叶子节点执行");
    }
}

3️⃣ 容器节点(Composite)

可以包含子节点

import java.util.ArrayList;
import java.util.List;

public class Composite extends Component {
    private List<Component> children = new ArrayList<>();

    @Override
    public void add(Component c) {
        children.add(c);
    }

    @Override
    public void remove(Component c) {
        children.remove(c);
    }

    @Override
    public void operation() {
        System.out.println("容器节点执行");
        for (Component c : children) {
            c.operation();
        }
    }
}

4️⃣ 客户端使用

public class Client {
    public static void main(String[] args) {
        Composite root = new Composite();
        root.add(new Leaf());

        Composite branch = new Composite();
        branch.add(new Leaf());
        root.add(branch);

        root.operation();
    }
}

四、透明式 vs 安全式

✅ 透明式(推荐)

  • 所有方法都在 Component 中
  • 客户端无需判断类型
  • 缺点:叶子可能不支持某些方法

✅ 安全式

  • 只有 Composite 有 add/remove
  • 更安全
  • 缺点:客户端需做类型判断

五、优缺点

✅ 优点

  • 高层模块调用简单
  • 符合开闭原则
  • 易于扩展树形结构

❌ 缺点

  • 设计较复杂
  • 类型限制较难控制

六、一句话总结

组合模式让你用统一的方式,操作“一个对象”和“一组对象”。

如果你愿意,我可以给你一个真实项目示例(如文件系统等)和装饰模式的区别说明

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI