设计模式 -- 组合模式

news2024/11/16 6:35:47

前言

月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂)

央是一片海洋,海乃百川,代表着一块海绵(吸纳万物)

泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出)

月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容

希望大家一起坚持这个过程,也同样希望大家最终都能从零到零,把知识从薄变厚,再由厚变薄!

一、什么是组合模式?

        组合模式是一种结构型设计模式,它允许我们将对象组合成树形结构,并且能够以相同的方式处理单个对象和组合对象。

        在组合模式中,有两种类型的对象:组合对象和叶子对象。组合对象包含其他对象,可以是组合对象或叶子对象;而叶子对象是最基本的对象,不包含其他对象

二、组合模式的优缺点:

优点:

  1. 简化客户端代码:组合模式允许客户端代码以相同的方式处理单个对象或对象组合,从而简化了客户端代码。

  2. 可以动态地添加或删除对象:由于对象组合形成了树形结构,因此可以动态地添加或删除对象,而不会影响其他部分的代码。

  3. 更容易扩展功能:由于组合模式允许将对象组合成树形结构,因此可以更容易地扩展功能,例如添加新的组合对象或叶对象。

  4. 提高代码重用性:组合模式将对象组合成树形结构,使得可以重复使用相同的代码来处理不同的组合对象。

  5. 可以更好地表示部分-整体关系:组合模式可以更好地表示部分-整体关系,例如文件系统中的文件夹和文件

缺点:

  1. 可能会导致设计变得过于抽象:组合模式的核心是把对象组合成树形结构,这可能会让设计变得过于抽象,使得代码难以理解和维护。

  2. 难以限制组合中的对象类型:组合模式中的叶子节点和组合节点都必须实现相同的接口,这可能会导致难以限制组合中的对象类型,使得代码变得不够安全。

  3. 可能会导致性能问题:组合模式中的对象通常是通过递归来遍历整个树形结构的,这可能会导致性能问题,特别是在处理大型树形结构时

三、组合模式的结构:

 

四、组合模式实战:

1.创建一个节点

2.测试

 3.测试结果

 

五.总结:

一些组合模式的应用场景包括:

  1. 菜单和子菜单:菜单和子菜单可以组成一个树形结构,其中菜单是整体,而子菜单是部分。

  2. 组织架构:公司的组织架构可以用树形结构来表示,其中公司是整体,而部门和员工是部分。

  3. 文件系统:文件系统也可以用树形结构来表示,其中文件夹是整体,而文件是部分。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CKA证书题库-总结

CKA真题(考题总结) 文章目录 CKA真题(考题总结)证书个人考试总结申诉结果 CKA题目参考博主重点介绍 CKA模拟题库 注意事项考试概要考试注意事项: CKA题目答案设置自动补全方法一方法二 第⼀题:权限控制RBAC…

C语言编程技巧 --- C语言中左移右移与乘除法的比较

C语言中右移与除法的比较 最近在做项目的时候,遇到了一个有趣的现象。那就是,对于除2的整数次幂的操作而言,为了加快计算速度,一般情况下,会用右移(>>)来替代除法(/&#xff0…

SparkSql(RDD、DataFrame、DataSet详解)idea实例+jdbc读取数据库并保存至数据库或本地

DataFrame 是什么 DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中 的二维表格。DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame 所表示的二维表数据集的每一列都带有名称和类型。这使得 Spark SQL …

QT Data Visualization 模块概述(数据三维显示的模块)

Data Visualization 是 Qt 提供的用于数据三维显示的模块。在 Ot 5.7 以前只有商业版才有此模块,而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示,包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…

KeepChatGPT插件-提效神器,解决ChatGPT报错!

KeepChatGPT插件-提效神器,解决ChatGPT报错! 一、错误提示 最近⼏天,相信不少人在使用OpenAI的ChatGPT时都发现一个问题,就是官⽹报错越来越频繁了。 当你需⽤ChatGPT来处理⼀些⽐较琐碎的任务时,⼀旦你离开⻚⾯时间…

Java多线程基础-7:wait() 和 notify() 用法解析

线程之间是抢占式执行的,线程调度是无序的、随机的,因此线程之间执行的先后顺序是难以预知的。但是,实际开发中,有时我们希望合理地协调多个线程间执行的先后顺序。 虽然 join() 算是一种控制顺序的方式,但它毕竟“功…

4月第3周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年4月17日-4月23日飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的B…

【华为机考】模拟题:Words、Vowel、计算字符串重新排列数

前言 刷题之路任重而道远,革命尚未成功,同志仍需努力。由于刷惯了 LeetCode,虽然知道华为机考是需要自己输入输出,也稍稍练了一下,结果真做模拟题的时候,一下子忘了怎么获取字符串了,直接搞了个…

数据降维算法 | Matlab基于局部费歇尔判别(LFDA)的分类数据降维可视化

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 数据降维算法 | Matlab 基于局部费歇尔判别(LFDA)的分类数据降维可视化 部分源码 %--------------------

了解网卡的类型

网卡,即网络接口卡,也叫NIC卡,是一种允许网络连接的计算机硬件设备。网卡应用广泛,市场上有许多不同种类,如PCle网卡,服务器网卡。本文将对网卡的基础,功能,元件与类型进行全方位讲解…

用友自主研发企业商用版TimensionDB时序数据库重磅发布!

2023年4月19日,用友BIP技术大会上,用友自主研发专用企业服务能力的商用版时序数据库——TimensionDB重磅发布!源于物联网、工业4.0等场景实践,打造自主、安全、可控的专业服务工业企业的轻量级、高性能、易使用的时序数据管理引擎…

linux-02-软件安装-centos7配置jdk、tomcat、lrzsz、项目部署(Git、Maven)

文章目录 Linux-Day02课程内容1. 软件安装1.1 软件安装方式1.2 安装JDKshell脚本里写 cd命令不生效 1.3 安装Tomcat1.3.1 Tomcat安装好多方便的自定义命令:1.3.2 Tomcat进程查看1.3.3 防火墙操作1.3.4 停止Tomcat 1.4 安装MySQL1.4.1 MySQL安装1.4.2 MySQL启动1.4.3 MySQL登录1…

PYQT5学习笔记04——QObject对象和属性名称设置API以及对应案例

一、QObject对象和属性名称设置API 简单介绍一下PyQt5最上层父类QObject的一些属性方法,并给出具体的使用过程示例。 1、setObjectName(“唯一名称”)和objectName() setObjectName方法的作用是给Qt对象设置一个名称,一般这个名称是唯一的,这…

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…

【Java】Eclipse如何创建java项目并运行

前面Eclipse、JDK的安装与JDK环境变量配置好了之后,开始进行基本的使用 一、创建java项目并运行 1、先打开Eclipse IDE 2、创建项目 点击左上角的File—>New—>Project,这样就可以新建一个Java的项目了。也就是说,在Eclipse中&#…

设置ubuntu开机启动脚本

一、新建xx-setpower.service文件 sudo gedit /etc/systemd/system/xx-setpower.service [Unit] DescriptionXX SetPower Service Afternetwork.target Wantsnetwork.target[Service] Typesimple PIDFile/run/take_up_boot.pid ExecStart/usr/bin/take_up_boot.sh Restarton-…

二进制码与格雷码的相互转换原理与Verilog实现

二进制码与格雷码的相互转换原理与Verilog实现 一、写在前面二、二进制码与格雷码的相互转换2.1 二进制码转格雷码原理2.2 异或运算的特性2.3 格雷码转二进制码原理 三、二进制码与格雷码相互转换的Verilog实现四、仿真验证五、写在后面 一、写在前面 二进制码是一种基于二进制…

RibbitMQ之RabbitMQ的介绍与安装

RabbitMQ的介绍与安装 1. MQ 的相关概念1.1 MQ 的概念1.2 MQ 的作用1.3 MQ 的分类1.3.1 ActiveMQ1.3.2 Kafka1.3.3 RocketMQ1.3.4 RabbitMQ 1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 RabibitMQ 的四大核心2.3 RabbitMQ 的核心部分2.4 RabbitMQ 名词介绍2.5 安装 Rabbi…

数学建模第五天:数学建模算法篇之层次分析法AHP

目录 一、前言 1、例题 2、层次分析法用途 二、层次分析法步骤 1、建立层次结构图 2、构造两两比较矩阵 3、确定相对权重向量 ①特征根法 ②和法 4、一致性检验 5、计算层次总排序权值和一致性检验 一、前言 1、例题 有大学生刘昊、小王、阿三、蛋仔四人&#xff0…

闪电加密和隐藏加密文件夹忘记密码怎么办?

闪电加密和隐藏加密是文件夹加密超级大师的两种文件夹加密类型,它们都拥有超快的加密算法,可以瞬间加密超大文件夹。那么这两种文件夹加密类型忘记密码该怎么办呢?下面我们一起来了解一下吧。 闪电加密和隐藏加密文件夹找回密码 首先&#x…