组合模式(Composite)

使用组合模式的场景:

  把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象.

组合模式核心:

  1. 抽象构件(Component)角色: 定义了叶子和容器构件的共同点
  2. 叶子(Leaf)构件角色:无子节点
  3. 容器(Composite)构件角色: 有容器特征,可以包含子节点

结构类图

组合模式工作流程分析:

  1. 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子。
  2. 当容器对象的指定方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员,并调用执行。其中,使用了递归调用的机制对整个结构进行处理。

文件管理案例

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 处理操作

开发中的应用场景:

  1. 操作系统的资源管理器
  2. GUI中的容器层次图
  3. XML文件解析
  4. OA系统中,组织结构的处理
  5. Junit单元测试框架
    • 底层设计就是典型的组合模式,TestCase(叶子)、TestUnite(容器)、Test接口(抽象)

Java组合模式(Composite)相关推荐

  1. Java设计模式 —— 组合模式(Composite)

    Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...

  2. 【结构型】组合模式(Composite)

    目录 组合模式(Composite) 适用场景 组合模式实例代码(Java) 组合模式(Composite) 将对象组合成树型结构以表示"部分-整体"的层次结构.Composite ...

  3. 结构型 组合模式 Composite

    Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使 用具有一致性. Mary今天过生日."我过生日,你要送我一件礼物. ...

  4. 设计模式(17):结构型-组合模式(Composite)(2)

    设计模式(Design pattern) 是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式 ...

  5. 【设计模式自习室】结构型:组合模式 Composite

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  6. 【设计模式】组合模式 Composite Pattern

    树形结构是软件行业很常见的一种结构,几乎随处可见,  比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...

  7. 设计模式学习笔记(六) - 组合模式 Composite (树状结构专用模式)

    组合模式 Composite 树状结构专用模式   递归遍历结构

  8. java设计模式组合模式详解_《JAVA设计模式》之组合模式(Composite)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述合成(Composite)模式的:html 合成模式属于对象的结构模式,有时又叫作"部分--总体"模式.合成模式将对象 ...

  9. 设计模式之组合模式(Composite)

    1.引言 在学习JUnit的时候,看到一段话"JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象:当调用TestSuite对象的run()方 ...

  10. python 设计模式之组合模式Composite Pattern

    #引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...

最新文章

  1. 阶乘在c语言代码大全,求10000的阶乘(c语言代码实现)
  2. Clonezilla制作镜像时报错:extfsclone.c:bitmap free count err解决办法
  3. DotNetCore Web应用程序中的Cookie管理
  4. log4net日志文件的应用
  5. java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制
  6. 这个世界上不存在什么弯道超车,只存在正道超车
  7. SQL查找是否“存在“,别再count了!
  8. 【路径规划】基于matlab GUI人工势场算法机器人避障路径规划(手动设障)【含Matlab源码 617期】
  9. laravel框架基础知识
  10. linux服务器 ip地址,查看linux服务器的IP地址
  11. 一分钟带你快速认识S参数
  12. 9月8日,直播抽奖:涂鸦智能带您掘金千亿美金智能市场
  13. 机器学习之朴素贝叶斯算法详解
  14. SystemService简介
  15. MapReduce理解-深入理解MapReduce
  16. 京东科技寒假实习前端一面面经
  17. 数据结构包括哪几种基本结构,各有什么特点
  18. 一分钟拍手游戏规则_我如何分析一百万篇中型文章,以了解获得多少拍手好故事...
  19. 【DBN分类】基于matlab深度置信网络DBN变压器故障诊断【含Matlab源码 2284期】
  20. Java8 LocalDateTime 转 UTC 时间

热门文章

  1. 计算机里电子 邮件格式,邮箱格式怎么写?
  2. H5新增音频标签-audio
  3. Windows 10微软应用商店打不开问题解决方案
  4. 手机app开发成本预算
  5. 怎么冻结表格前几行和前几列_如何冻结表格前几列
  6. https配置CA证书安装教程
  7. 基于深度学习的自然场景文字识别系统研究 faster-RCNN + CRNN (一)
  8. 吴伯凡-认知方法论-如何做到真正的反思
  9. 史上最强的MSN聊天记录!
  10. linux复制dos命令,Linux mcopy复制MSDOS格式档案命令详解