【Java】23种设计模式——8.组合模式

概念

组合模式(Composite Pattern)是一种结构型设计模式。合模式实际上就是将多个组件进行组合,让用户可以对它们进行一致性处理。

核心角色

角色 职责 示例场景
Component(抽象组件) 声明所有对象的通用接口(如操作方法) FileSystemComponent
Leaf(叶子节点) 实现 Component,表示无子节点的终结点 文件(File
Composite(组合节点) 实现 Component,管理子节点集合 文件夹(Directory

适用场景

  • 层次化数据结构 : 文件系统、组织架构、UI组件树。
  • 统一操作逻辑 : 需对整体和部分执行相同操作(渲染、统计)。
  • 动态组合对象 : 运动时动态添加/移除子节点(菜单导航)。

使用

设计一个文件系统,支持文件和文件夹的统一操作。

  • 抽象组件 (文件系统通用接口)

    /**
     * 抽象组件 : 文件系统通用接口
     * @Author:lyj
     * @Date:2025/5/6 11:08
     */
    public interface FileSystemComponent {
        /**
         * 显示文件
         * @param index 文件层级
         */
        public void display(int index);
    }
    
  • 叶子节点 (文件)

    /**
     * 叶子节点 : 文件
     * @Author:lyj
     * @Date:2025/5/6 11:13
     */
    public class File implements FileSystemComponent{
        private String name;        // 文件名
        public File(String name) {
            this.name = name;
        }
        @Override
        public void display(int index) {
            System.out.println("  ".repeat(index) + " \uD83D\uDCC4 " + name);
        }
    }
    
  • 组合节点 (文件夹)

    /**
     * 叶子节点 : 文件
     * @Author:lyj
     * @Date:2025/5/6 11:13
     */
    public class File implements FileSystemComponent{
        private String name;        // 文件名
        public File(String name) {
            this.name = name;
        }
        @Override
        public void display(int index) {
            System.out.println("  ".repeat(index) + " \uD83D\uDCC4 " + name);
        }
    }
    

    运行测试如下:

    // 创建子文件夹和文件
    Directory dir1 = new Directory("学习");
    dir1.add(new File("c++.txt"));
    dir1.add(new File("python.txt"));
    dir1.add(new File("java.txt"));
    File file1 = new File("java.txt");
    // 创建文件和文件夹
    Directory  root = new Directory("E:");
    root.add(dir1);
    root.add(file1);
    // 统一调用显示
    root.display(0);
    

    运行文件显示如下:
    image

posted @ 2025-06-20 15:40  陆陆无为而治者  阅读(31)  评论(0)    收藏  举报