java中组合模式详解和使用方法

news/2024/7/10 1:42:19 标签: 设计模式, java, 编程语言, 大数据, vue

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。

介绍

意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

何时使用:
1、您想表示对象的部分-整体层次结构(树形结构)。
2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。

关键代码:树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

应用实例:
1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。
2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。

优点:
1、高层模块调用简单。

2、节点自由增加。

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。

注意事项:定义时为具体类。

实现

我们有一个类 Employee,该类被当作组合模型类。CompositePatternDemo,我们的演示类使用 Employee 类来添加部门层次结构,并打印所有员工。


http://www.niftyadmin.cn/n/1685772.html

相关文章

Python 三目运算符讲解(作用、语法、代码示例)

这篇文章介绍三目运算符的作用、语法、利用例子体验一下三目运算符。 三目运算符的作用: 化简代码量的,化简的是非常简单的if...else的代码,也就是if条件成立就执行一句代码,不成立就执行另外一句代码。 三目运算符含义&#xff1…

【详细讲解】Python中while循环

一、循环的作用: 作用:让代码更高效的重复执行 下面用一个问题来说明循环的作用: 问题思考:假如你有个女朋友,有一天你们吵架,你媳妇让你对她说100遍:“媳妇,我错了”,你…

一次关于 Mysql 索引优化的思考

查看系统性能监控,发现有十多条慢查询,决定将其优化。挑选其中一条典型Sql记录其优化历程。 1.概述 在下文的查询优化中,主要围绕的问题:Mysql为何会选错索引? 2.优化历程 2.1,定位问题 为了便于描述&…

Python中while循环的2个实例

利用while循环的应用把whlei的语法和执行流程更高层次的理解和体会。 应用一: 需求: 计算1-100数字累加和 分析: 1-100的累计价和,即123456...100,即前面两个数组的相加结果加上下一个数字(下一个数字就…

肝了3个月!在GitHub上撸了个Java面试「神仙笔记」,限时免费下载

最近睡眠严重不足,黑眼圈都出来了。 别问,问就是给大家肝面试题去了。 这不,肝了2个月,终于把今年大厂的高频面试题给肝出来了。 我在这份面试题上倾注了大量心血和宝贵的睡眠时间,只求各位看官老爷看完能点个赞&am…

Python中退出循环的两种不同方式:break和continue

break和continue是循环中满足一定条件退出循环的两种不同方式,下面来利用 例子详细讲解一下。python教程也出了很多,都是Python基础教程类的文章,当然中高阶的视频教程也有在个人博客Python自学网上。 一、理解: 举例&#xff1…

高频Redis面试题解析:Redis 事务是否具备原子性?

一、Redis 事务的实现原理 一个事务从开始到结束通常会经历以下三个阶段: 1、事务开始 客户端发送 MULTI 命令,服务器执行 MULTI 命令逻辑。 服务器会在客户端状态(redisClient)的 flags 属性打开 REDIS_MULTI 标识&#xff0…

【4个方面详细讲解】Python中while循环嵌套

一、应用场景: 故事梗概: 有一天你的女朋友她又生气了,让你说3遍“媳妇,我错了”,这个程序是不是循环即可?但是如果你女朋友说:还要刷今晚吃饭的碗,这个程序又该怎么写呢&#xff1…