温馨提示×

温馨提示×

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

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

java组合模式包含什么

发布时间:2026-10-05 09:46:58 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java 设计模式中,组合模式(Composite Pattern) 属于结构型模式,主要用于处理树形结构(部分—整体层次结构),使得用户对单个对象和组合对象的使用具有一致性。


一、组合模式包含的角色(核心组成)

组合模式通常包含以下 4 个部分:

1. Component(抽象构件 / 组件接口)

  • 定义叶子节点和容器节点共有的行为
  • 通常是一个 抽象类或接口
  • 可以声明一些默认行为(如 add、remove)
public interface Component {
    void operation();
}

2. Leaf(叶子节点)

  • 表示树结构中的最小单位
  • 没有子节点
  • 实现 Component 中的方法
public class Leaf implements Component {
    @Override
    public void operation() {
        System.out.println("叶子节点执行");
    }
}

3. Composite(容器节点 / 组合节点)

  • 包含子组件(Leaf 或其他 Composite)
  • 实现 add、remove、getChild
  • 通常递归调用子组件的方法
import java.util.ArrayList;
import java.util.List;

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

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

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

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

4. Client(客户端)

  • 使用 Component 接口操作对象
  • 不关心是叶子还是组合
public class Client {
    public static void main(String[] args) {
        Component leaf1 = new Leaf();
        Component leaf2 = new Leaf();

        Composite composite = new Composite();
        composite.add(leaf1);
        composite.add(leaf2);

        composite.operation();
    }
}

二、组合模式的两种实现方式(Java 中常见)

✅ 1. 透明式(推荐)

  • add、remove 定义在 Component 中
  • 叶子类也要实现(可能抛异常)
interface Component {
    void add(Component c);
    void remove(Component c);
    void operation();
}

➡ 客户端使用统一接口


⚠ 2. 安全式

  • add、remove 只在 Composite 中定义
  • 叶子类不实现这些方法

➡ 更安全,但客户端需要判断类型


三、组合模式包含的核心思想总结

✅ 统一处理个体和组合
✅ 递归结构(树形)
✅ 依赖抽象(Component)


四、典型应用场景(Java 中)

  • 文件系统(文件 / 文件夹)
  • GUI 组件(Panel / Button)
  • 菜单系统(菜单 / 菜单项)
  • XML / JSON 解析树

如果你愿意,我也可以:

  • 画一个 UML 图
  • 写一个 完整可运行的 Java 示例
  • 对比 组合模式 vs 装饰器模式

需要哪一个?

向AI问一下细节

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

AI
助
手