温馨提示×

温馨提示×

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

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

java组合模式怎么实现

发布时间:2026-10-25 23:55:39 来源:亿速云 阅读:98 作者:小樊 栏目:编程语言

在 Java 中,组合模式(Composite Pattern) 属于结构型设计模式,用于把对象组合成树形结构来表示“部分—整体”的层次关系,使得用户对单个对象和组合对象的访问具有一致性。

下面用清晰示例 + 代码说明如何实现。


一、组合模式的核心角色

  1. Component(抽象构件)
    声明公共接口(可以是抽象类或接口)

  2. Leaf(叶子节点)
    叶子对象,没有子节点

  3. Composite(容器节点)
    包含子节点,管理子组件


二、示例:公司组织结构

公司 → 部门 → 员工
部门和员工都可以“显示信息”


三、代码实现

1️⃣ 抽象构件(Component)

// 抽象构件
public abstract class Component {
    protected String name;

    public Component(String name) {
        this.name = name;
    }

    public abstract void show(int depth);

    // 可选:添加/删除子节点
    public void add(Component c) {
        throw new UnsupportedOperationException();
    }

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

2️⃣ 叶子节点(Leaf)

// 叶子节点:员工
public class Employee extends Component {

    public Employee(String name) {
        super(name);
    }

    @Override
    public void show(int depth) {
        System.out.println("  ".repeat(depth) + "员工:" + name);
    }
}

3️⃣ 组合节点(Composite)

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

// 组合节点:部门
public class Department extends Component {
    private List<Component> children = new ArrayList<>();

    public Department(String name) {
        super(name);
    }

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

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

    @Override
    public void show(int depth) {
        System.out.println("  ".repeat(depth) + "部门:" + name);
        for (Component c : children) {
            c.show(depth + 1);
        }
    }
}

4️⃣ 客户端使用

public class Client {
    public static void main(String[] args) {
        Component emp1 = new Employee("张三");
        Component emp2 = new Employee("李四");

        Department dev = new Department("研发部");
        dev.add(emp1);
        dev.add(emp2);

        Component emp3 = new Employee("王五");
        Department hr = new Department("人事部");
        hr.add(emp3);

        Department company = new Department("总公司");
        company.add(dev);
        company.add(hr);

        company.show(0);
    }
}

5️⃣ 输出结果

部门:总公司
  部门:研发部
    员工:张三
    员工:李四
  部门:人事部
    员工:王五

四、组合模式的优点

✅ 清晰地表达树形结构
✅ 客户端无需区分“单个对象”和“组合对象”
✅ 符合开闭原则


五、适用场景

  • 文件 / 文件夹结构
  • 菜单 / 子菜单
  • 组织结构
  • UI 组件树(如 Swing、JavaFX)

如果你愿意,我也可以给你:

  • ✅ 透明式 vs 安全式组合模式
  • ✅ 结合 Spring 的实现
  • ✅ 实际项目中的应用示例

需要哪一种?

向AI问一下细节

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

AI
助
手