Java组合模式(Composite)
组合模式(Composite)
使用组合模式的场景:
把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象.
组合模式核心:
- 抽象构件(Component)角色: 定义了叶子和容器构件的共同点
- 叶子(Leaf)构件角色:无子节点
- 容器(Composite)构件角色: 有容器特征,可以包含子节点
结构类图
组合模式工作流程分析:
- 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子。
- 当容器对象的指定方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员,并调用执行。其中,使用了递归调用的机制对整个结构进行处理。
文件管理案例
Component抽象
/*** 抽象构建* @author 波波烤鸭* @email dengpbs@163.com**/
public interface AbstractFile {/*** 定义操作的方法*/void operiation();
}
Leaf节点
public class ImageFile implements AbstractFile{private String name;public ImageFile(String name) {super();this.name = name;}@Overridepublic void operiation() {System.out.println("图片文件:"+name+" 处理操作");}
}
public class TextFile implements AbstractFile{private String name;public TextFile(String name) {super();this.name = name;}@Overridepublic void operiation() {System.out.println("文本文件:"+name+" 处理操作");}
}
public class VideoFile implements AbstractFile{private String name;public VideoFile(String name) {super();this.name = name;}@Overridepublic void operiation() {System.out.println("视频文件:"+name+" 处理操作");}
}
Composite容器
/*** Composite容器组件* @author 波波烤鸭* @email dengpbs@163.com**/
public class Folder implements AbstractFile{private String name;// 定义容器,用来存储叶子节点 也就是存储文件private List<AbstractFile> list = new ArrayList<>();public Folder(String name) {super();this.name = name;}public void add(AbstractFile file){list.add(file);}public void remove(AbstractFile file){list.remove(file);}public AbstractFile getChild(int index){return list.get(index);}@Overridepublic void operiation() {System.out.println("处理:"+name+"文件夹");for (AbstractFile file : list) {file.operiation();}}
}
测试
public static void main(String[] args) {AbstractFile textFile,imageFile,videoFile;textFile = new TextFile("readme.txt");imageFile = new ImageFile("波波烤鸭.jpg");videoFile = new VideoFile("aaa.mp4");Folder f = new Folder("c:/tools");f.add(videoFile);f.add(imageFile);f.add(textFile);Folder f1 = new Folder("c:/");f1.add(videoFile);f1.add(videoFile);f1.add(imageFile);f1.add(f);f1.operiation();
}
输出:
处理:c:/文件夹
视频文件:aaa.mp4 处理操作
视频文件:aaa.mp4 处理操作
图片文件:波波烤鸭.jpg 处理操作
处理:c:/tools文件夹
视频文件:aaa.mp4 处理操作
图片文件:波波烤鸭.jpg 处理操作
文本文件:readme.txt 处理操作
开发中的应用场景:
- 操作系统的资源管理器
- GUI中的容器层次图
- XML文件解析
- OA系统中,组织结构的处理
- Junit单元测试框架
• 底层设计就是典型的组合模式,TestCase(叶子)、TestUnite(容器)、Test接口(抽象)
Java组合模式(Composite)相关推荐
- Java设计模式 —— 组合模式(Composite)
Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...
- 【结构型】组合模式(Composite)
目录 组合模式(Composite) 适用场景 组合模式实例代码(Java) 组合模式(Composite) 将对象组合成树型结构以表示"部分-整体"的层次结构.Composite ...
- 结构型 组合模式 Composite
Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使 用具有一致性. Mary今天过生日."我过生日,你要送我一件礼物. ...
- 设计模式(17):结构型-组合模式(Composite)(2)
设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...
- 【设计模式自习室】结构型:组合模式 Composite
前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...
- 【设计模式】组合模式 Composite Pattern
树形结构是软件行业很常见的一种结构,几乎随处可见, 比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...
- 设计模式学习笔记(六) - 组合模式 Composite (树状结构专用模式)
组合模式 Composite 树状结构专用模式 递归遍历结构
- java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)
在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的:html 合成模式属于对象的结构模式,有时又叫作"部分--总体"模式.合成模式将对象 ...
- 设计模式之组合模式(Composite)
1.引言 在学习JUnit的时候,看到一段话"JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象:当调用TestSuite对象的run()方 ...
- python 设计模式之组合模式Composite Pattern
#引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...
最新文章
- 阶乘在c语言代码大全,求10000的阶乘(c语言代码实现)
- Clonezilla制作镜像时报错:extfsclone.c:bitmap free count err解决办法
- DotNetCore Web应用程序中的Cookie管理
- log4net日志文件的应用
- java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制
- 这个世界上不存在什么弯道超车,只存在正道超车
- SQL查找是否“存在“,别再count了!
- 【路径规划】基于matlab GUI人工势场算法机器人避障路径规划(手动设障)【含Matlab源码 617期】
- laravel框架基础知识
- linux服务器 ip地址,查看linux服务器的IP地址
- 一分钟带你快速认识S参数
- 9月8日,直播抽奖:涂鸦智能带您掘金千亿美金智能市场
- 机器学习之朴素贝叶斯算法详解
- SystemService简介
- MapReduce理解-深入理解MapReduce
- 京东科技寒假实习前端一面面经
- 数据结构包括哪几种基本结构,各有什么特点
- 一分钟拍手游戏规则_我如何分析一百万篇中型文章,以了解获得多少拍手好故事...
- 【DBN分类】基于matlab深度置信网络DBN变压器故障诊断【含Matlab源码 2284期】
- Java8 LocalDateTime 转 UTC 时间