当前位置: 首页 > article >正文

Java 设计模式之组合模式

文章目录

  • Java 设计模式之组合模式
    • 概述
    • UML
    • 代码实现

Java 设计模式之组合模式

概述

  • 组合模式(Composite):将对象组合成树形结构以表示’部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
  • 优点:客户端可以统一处理单个对象和组合对象。支持递归组合,简化了复杂结构的处理。

UML

在这里插入图片描述

  • Component:抽象了或接口,定义叶子节点和组合节点的共同行为
  • Leaf:叶子节点,表示没有子组件。
  • Composite:组合节点,可以包含其他子组件。

代码实现

定义组件:

public abstract class Component {
    protected String name;

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

    /**
     * 显示
     *
     * @param level 第几层级
     */
    public abstract void display(int level);
}

定义叶子节点:

public class File extends Component {
    public File(String name) {
        super(name);
    }

    @Override
    public void display(int level) {
        System.out.println("-".repeat(level * 4) + "File:" + name);
    }
}

定义组合节点:

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

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

    public void addComponent(Component component) {
        children.add(component);
    }

    public void removeComponent(Component component) {
        children.remove(component);
    }

    @Override
    public void display(int level) {
        System.out.println("-".repeat(level * 4) + "Directory:" + name);
        for (Component component : children) {
            component.display(level + 1);
        }
    }
}

使用:

public class Client {
    public static void main(String[] args) {
        File file1 = new File("file1.txt");
        File file2 = new File("file2.txt");
        File file3 = new File("file3.txt");
        File file4 = new File("file4.txt");
        Directory root = new Directory("root");
        Directory dir1 = new Directory("dir1");
        Directory dir2 = new Directory("dir2");
        root.addComponent(file1);
        root.addComponent(dir1);
        dir1.addComponent(file2);
        dir1.addComponent(dir2);
        dir2.addComponent(file3);
        dir2.addComponent(file4);
        root.display(0);
    }
}

输出:

Directory:root
----File:file1.txt
----Directory:dir1
--------File:file2.txt
--------Directory:dir2
------------File:file3.txt
------------File:file4.txt

http://www.kler.cn/a/546652.html

相关文章:

  • Windows 图形显示驱动开发-WDDM 2.0 -Gpu段
  • 云计算——ACA学习 云计算分类
  • ESP学习-1(MicroPython VSCode开发环境搭建)
  • Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
  • 百度宣布:免费!
  • Next.js【详解】CSS 样式方案
  • 【MySQL — 数据库基础】深入解析 MySQL 的联合查询
  • 支付宝 IoT 设备入门宝典(上)设备管理篇
  • 20250214 随笔 Nginx 负载均衡在数据库中的应用
  • JavaScript + HTML5 Canvas 实现互动爱心雨
  • UE5中的快捷键汇总
  • Java实现MinIO上传PDF文件并配置浏览器在线打开而非下载
  • 智能协同:数据集成平台与DeepSeek驱动的数据分析与智能调度革新
  • 新版电脑通过wepe安装系统
  • 2. 图片性能优化
  • Vue笔记(十)
  • NIO 和 AIO 的区别?
  • elementuiPlus日期范围选择el-date-picker动态禁用时间选择
  • DeepSeek全生态接入指南:官方通道+三大云平台
  • 初学 mybatis