温馨提示×

温馨提示×

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

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

java组合模式经典例子

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

下面给你一个Java 组合模式(Composite Pattern)的经典例子,这是教学和面试中最常见的:文件系统(目录 + 文件)模型。


一、组合模式简介

组合模式用于:

将对象组合成树形结构,以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

核心角色:

  • Component(抽象组件)
  • Leaf(叶子节点)
  • Composite(容器节点)

二、经典示例:文件系统

1️⃣ 抽象组件(Component)

// 抽象文件节点
public abstract class FileSystemNode {
    protected String name;

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

    public abstract void print();
}

2️⃣ 叶子节点(Leaf:文件)

// 文件(叶子节点)
public class File extends FileSystemNode {

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

    @Override
    public void print() {
        System.out.println("文件:" + name);
    }
}

3️⃣ 组合节点(Composite:目录)

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

// 目录(组合节点)
public class Directory extends FileSystemNode {
    private List<FileSystemNode> children = new ArrayList<>();

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

    public void add(FileSystemNode node) {
        children.add(node);
    }

    public void remove(FileSystemNode node) {
        children.remove(node);
    }

    @Override
    public void print() {
        System.out.println("目录:" + name);
        for (FileSystemNode node : children) {
            node.print();
        }
    }
}

4️⃣ 客户端测试

public class Client {
    public static void main(String[] args) {
        File file1 = new File("a.txt");
        File file2 = new File("b.txt");

        Directory dir1 = new Directory("文档");
        dir1.add(file1);
        dir1.add(file2);

        Directory root = new Directory("根目录");
        root.add(dir1);
        root.add(new File("readme.md"));

        root.print();
    }
}

5️⃣ 输出结果

目录:根目录
目录:文档
文件:a.txt
文件:b.txt
文件:readme.md

三、为什么这是经典例子?

✅ 目录和文件形成树形结构
✅ 用户对“文件”和“目录”调用方式一致
✅ 符合开闭原则(可随意扩展)


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

  • ✅ 带 权限控制 的组合模式
  • ✅ 菜单(Menu / MenuItem)示例
  • ✅ 组合模式在 Spring / MyBatis 中的应用

你想看哪一种?

向AI问一下细节

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

AI
助
手