设计模式——组合模式08

组合模式:把类似对象或方法组合成结构为树状的设计思路。
例如部门之间的关系。
设计模式,一定要敲代码理解

在这里插入图片描述

抽象组件

/*** @author ggbond* @date 2024年04月06日 08:54* 部门有:二级部门(下面管三级部门) 三级部门 (无子部门)*/
public abstract class Compound {private String name; // 部门public Compound(String name) {this.name = name;}public String getName() {return name;}public abstract void add(Compound component); // 添加子部门public abstract void remove(Compound component); // 删除子部门public abstract void select(int depth); // 查看全部子部门
}

叶子结点

/*** @author ggbond* @date 2024年04月06日 08:57* 叶子节点 三级部门*/
public class Leaf extends Compound {public Leaf(String name) {super(name);}@Overridepublic void add(Compound component) {System.out.println("不能加子部门");}@Overridepublic void remove(Compound component) {System.out.println("无子部门,无删除权限");}@Overridepublic void select(int depth) {//输出树形结构的叶子节点,这里直接输出设备名称for(int i = 0;  i < depth; i++) {System.out.print("*");}System.out.print(" ");System.out.println(getName());}
}

非叶子结点

/*** @author ggbond* @date 2024年04月06日 09:00*/
public class Composite extends  Leaf{// 记录子部门信息private ArrayList<Compound> list = new ArrayList<>();public Composite(String name) {super(name);}@Overridepublic void add(Compound component) {list.add(component);}@Overridepublic void remove(Compound component) {list.remove(component);}@Overridepublic void select(int depth) {for (int i = 0; i < depth; i++) {System.out.print("*");}System.out.print(" ");System.out.println(getName());// 递归for(Compound compound: list) {compound.select(depth + 1);}}
}

测试结果


/*** @author ggbond* @date 2024年04月06日 09:04*/
public class Main {public static void main(String[] args) {Composite root=new Composite("一级部门1");//二级部门1Composite r21=new Composite("二级部门1");r21.add(new Composite("三级部门1"));r21.add(new Composite("三级部门2"));r21.add(new Composite("三级部门3"));//二级部门2Composite r22=new Composite("二级部门2");r22.add(new Composite("三级部门4"));r22.add(new Composite("三级部门5"));r22.add(new Composite("三级部门6"));//二级部门3Composite r23=new Composite("二级部门3");root.add(r21); root.add(r22); root.add(r23);root.select(1);}
}
* 一级部门1** 二级部门1*** 三级部门1*** 三级部门2*** 三级部门3** 二级部门2*** 三级部门4*** 三级部门5*** 三级部门6** 二级部门3

总结

满足开闭原则。叶子结点与非叶子结点都继承或实现同一抽象,只是叶子功能权限少,而非叶子结点需要容器记录子节点。

代码下载

代码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596636.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爬取学习强国视频小示例

因为需要爬取的视频数量并不是很大&#xff0c;总共需要将131个视频下载下来&#xff0c;所以就直接去手动找找视频的地址和名称保存下来的。由于页面是动态加载的&#xff0c;所以我们无法在网站源码中直接找到视频的超链接。设想是可以用Selenium模拟浏览器点击进行动态加载获…

【计算机毕业设计】五台山景点购票系统,后附源码

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…

008 CSS盒子模型

文章目录 盒子模型内容-宽度和高度内边距-padding边框-border圆角-border-radius 外边距-margin上下margin的传递上下margin的折叠块级元素的水平居中行内级元素(包括inline-block元素)的水平居中 外轮廓-outline盒子阴影-box-shadow文字阴影-text-shadow行内非替换元素的特殊性…

【TI毫米波雷达】IWR6843AOP的官方文件资源名称BUG,选择xwr68xx还是xwr64xx,及需要注意的问题

【TI毫米波雷达】IWR6843AOP的官方文件资源名称BUG&#xff0c;选择xwr68xx还是xwr64xx&#xff0c;及需要注意的问题 文章目录 demo工程out_of_box文件调试bin文件名称需要注意的问题附录&#xff1a;结构框架雷达基本原理叙述雷达天线排列位置芯片框架Demo工程功能CCS工程导…

【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图

SCI&#xff0c;CCF&#xff0c;EI及核心期刊绘图宝典&#xff0c;爆款持续更新&#xff0c;助力科研&#xff01; 本期分享&#xff1a; 【SCI绘图】【小提琴系列1 python】绘制按分类变量分组的垂直小提琴图&#xff0c;文末附完整代码 小提琴图是一种常用的数据可视化工具…

2. Django配置信息

第2章 Django配置信息 Django的配置文件settings.py用于配置整个网站的环境和功能, 核心配置必须有项目路径, 密钥配置, 域名访问权限, App列表, 中间件, 资源文件, 模板配置, 数据库的连接方式.* 项目运行时, 如果修改代码, 项目会自动检测发现改动后会重新运行, 除非报错否…

Golang | Leetcode Golang题解之第12题整数转罗马数字

题解&#xff1a; 题解&#xff1a; var (thousands []string{"", "M", "MM", "MMM"}hundreds []string{"", "C", "CC", "CCC", "CD", "D", "DC", "…

Mac资源库的东西可以删除吗?mac资源库在哪里打开 cleanmymacx是什么 cleanmymac免费下载

在使用Mac电脑的过程中&#xff0c;用户可能会遇到存储空间不足的问题。一种解决方法是清理不必要的文件&#xff0c;其中资源库&#xff08;Library&#xff09;文件夹是一个常被提及但又让人迷惑的目标。Mac资源库的东西可以删除吗&#xff1f;本文旨在解释Mac资源库的作用、…

sqlmap(四)案例

一、注入DB2 http://124.70.71.251:49431/new_list.php?id1 这是墨者学院里的靶机&#xff0c;地址&#xff1a;https://www.mozhe.cn/ 1.1 测试数据库类型 python sqlmap.py -u "http://124.70.71.251:49431/new_list.php?id1" 1.2 测试用户权限类型 查询选…

Linux(Ubuntu)中创建【samba】服务,用于和Windows系统之间共享文件

目录 1.先介绍一下什么是Samba 2.安装&#xff0c;配置服务 安装 配置&#xff08;smb.conf&#xff09; 配置用户 3.出现的问题&#xff08;Failed to add entry for user XXXX&#xff09; 4.创建文件夹 5.windows访问 1.先介绍一下什么是Samba Samba是一个开源的软…

最优控制理论笔记 - 02变分与泛函1

目录 一、概念 二. 函数接近 1. 零阶接近度 2. 一阶接近度 3. K阶接近度 三、函数间的距离 四、连续泛函 五、线性泛函 六、变分的概念 1. 宗量的变分 2. 泛函的变分 3. 函数的变分 七、泛函变分的计算方法 例题 八、泛函的极值 九、泛函极值定理 一、概念 …

AI大语言模型GPT —— R 生态环境领域数据统计分析

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…