设计模式之组合设计模式实战 文件展示 树叶子节点

server/2025/2/23 5:38:04/

1.组合设计模式实战 文件展示 树叶子节点

  • 组合设计模式

    • 又叫部分整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,可以更好的实现管理操作
    • 组合模式使得用户可以使用一致的方法操作单个对象和组合对象
    • 部分-整体对象的基本操作多数是一样的,但是应该还会有不一样的地方
    • 核心:组合模式可以使用一棵树来表示
  • 角色

    • 组合部件(Component):它是一个抽象接口,表示树根,例子:总行
    • 合成部件(Composite):和组合部件类似,也有自己的子节点,例子:总行下的分行
    • 叶子(Leaf):在组合中表示子节点对象,注意是没有子节点,例子:最小地方的分行
  • 代码示例

    import java.util.ArrayList;
    import java.util.List;/*** 根节点,抽象类,通用的属性和方法*/
    abstract class Root {private String name;public Root(String name) {this.name = name;}public void setName(String name) {this.name = name;}public String getName() {return name;}public abstract void addFile(Root root);public abstract void display(int depth);
    }/*** 具体的文件夹,里面可以添加子文件夹或文件*/
    class Folder extends Root {List<Root> folders = new ArrayList<>();public Folder(String name) {super(name);}public void setFolders(List<Root> folders) {this.folders = folders;}public List<Root> getFolders() {return folders;}@Overridepublic void addFile(Root root) {folders.add(root);}@Overridepublic void display(int depth) {StringBuilder sb = new StringBuilder();for (int i = 0; i < depth; i++) {sb.append(" ");}// 打印横线和当前文件名System.out.println(sb + this.getName());for (Root r : folders) {// 每个下级,横线多2个r.display(depth + 2);}}
    }/*** 叶子节点:这个类没有节点,不用存储其他子类数组*/
    class File extends Root {public File(String name) {super(name);}@Overridepublic void addFile(Root root) {}@Overridepublic void display(int depth) {StringBuilder sb = new StringBuilder();for (int i = 0; i < depth; i++) {sb.append(" ");}// 打印横线和当前文件名System.out.println(sb + this.getName());}
    }public class Main {public static void main(String[] args) {Folder root = new Folder("C://");Folder desktop = new Folder("桌面");Folder myComputer = new Folder("我的电脑");File cFile = new File("C文件");root.addFile(desktop);root.addFile(myComputer);root.addFile(cFile);File javaFile = new File("HelloWorld.java");desktop.addFile(javaFile);root.display(0);}
    }
    
  • 优点

    • 客户端只需要面对一致的对象而不用考虑整体部分或者节点叶子的问题
    • 方便创建出复杂的层级结构
  • 缺点

    • 客户端需要花更多时间理清类之间的层次关系

http://www.ppmy.cn/server/170046.html

相关文章

MATLAB基础学习相关知识

MATLAB安装参考&#xff1a;抖音-记录美好生活 MATLAB基础知识学习参考&#xff1a;【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分&#xff1a;变量定义和基本运算 生成矩阵&#xff1a; % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…

代码随想录算法训练营day42(0210)

困难暂时搁置&#xff0c;为了跟进度 1.买卖股票IV 题目 188. 买卖股票的最佳时机 IV 给你一个整数数组 prices 和一个整数 k &#xff0c;其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说…

从零到一:构建现代 React 应用的完整指南

1. create-react-app (CRA) 简介: create-react-app 是官方推荐的 React 项目脚手架工具,提供了一个开箱即用的开发环境,帮助开发者快速启动 React 应用。它会自动配置 Webpack、Babel、ESLint 等工具,让你专注于开发而不需要手动配置工具链。 特点: 零配置:CRA 自动配…

从零开始学习PX4源码9(部署px4源码到gitee)

目录 文章目录 目录摘要1.gitee上创建仓库1.1 gitee上创建仓库PX4代码仓库1.2 gitee上创建子仓库2.固件在gitee部署过程2.1下载固件到本地2.2切换本地分支2.3修改.gitmodules内容2.4同步子模块仓库地址2.5同步子模块仓库地址更新(下载)子模块3.一级子模块和二级子模块的映射关…

微信问题总结(onpageshow ,popstate事件)

此坑描述 订单详情某按钮点击&#xff0c;通过window.location.href跳转到&#xff08;外部&#xff09;第三方链接后&#xff0c;回退后&#xff0c;在ios中生命周期和路由导航钩子都失效了&#xff0c;无法触发。 在安卓中无视此坑&#xff0c; 回退没有问题 解决 原因&am…

图解MySQL【日志】——Redo Log

Redo Log&#xff08;重做日志&#xff09; 为什么需要 Redo Log&#xff1f; 1. 崩溃恢复 数据库崩溃时&#xff0c;系统通过 Redo Log 来恢复尚未写入磁盘的数据。Redo Log 记录了所有已提交事务的操作&#xff0c;系统在重启后会重做这些操作&#xff0c;以保证数据不会丢…

可视化工具SciChart如何结合Deepseek快速创建一个React仪表板?

SciChart JavaScript Charts图表库能帮助用户来探索JS应用程序的最终解决方案&#xff0c;使用WebGL创建动态、高速的图表和图形&#xff0c;非常适合实时处理复杂的数据可视化&#xff0c;使用其强大而灵活的JS图表工具可以提升JavaScript项目。 通过在1000多个输出类型上使用…

单片机原理与运用

个人主页&#xff1a;java之路-CSDN博客(期待您的关注) 目录 一、走进单片机的世界 二、单片机是什么 &#xff08;一&#xff09;定义与本质 &#xff08;二&#xff09;与普通计算机的区别 三、单片机的工作原理深度剖析 &#xff08;一&#xff09;硬件组成及功能 &am…