组合模式

工作流程分析

  组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子

  当容器对象的指定方法被调用时,将遍历整个树形结构,寻找包含整个方法的成员,并调用执行,其中,使用了递归调用的机制对整个结构进行处理

角色:

抽象组件角色: 定义了叶子和容器组件的共同点.下面的代码用abstractFile 来代替

叶子(leaf)角色:  特点无子节点

容器(composite)角色: 有容器特征可以包含子节点 folder类来代替

类图

代码:

我们来简单的模拟下一个杀毒软件的树形结构.来进行杀毒

package com.disign.composite;public interface AbstractFile {void killVirus();
}/*** 叶子节点角色*/
class ImageFile implements AbstractFile {private String name;public ImageFile(String name) {this.name = name;}@Overridepublic void killVirus() {System.out.println("kill  " + name + " virus ");}
}class VideoFile implements AbstractFile {private String name;public VideoFile(String name) {this.name = name;}@Overridepublic void killVirus() {System.out.println("kill  " + name + " virus ");}
}class TextFile implements AbstractFile {private String name;public TextFile(String name) {this.name = name;}@Overridepublic void killVirus() {System.out.println("kill  " + name + " virus ");}
}/*** 在组合模式中代表 容器*/
public class Folder implements  AbstractFile {private String name;public Folder(String name) {this.name = name;}public String getName() {return name;}private LinkedList<AbstractFile> list = new LinkedList<>();public void add(AbstractFile file){list.add(file);}public void remove(AbstractFile file){list.remove(file);}public AbstractFile get(int index ){return list.get(index);}@Overridepublic void killVirus() {System.out.println("kill "+name +" folder");for (AbstractFile abstractFile : list) {abstractFile.killVirus();}}
}public class Main {public static void main(String[] args) {AbstractFile f1,f2,f3,f4,f5;Folder file = new Folder("我的收藏");f1 = new ImageFile("不健康的图片.jpg");f2 = new TextFile("不健康的文本");file.add(f1);file.add(f2);Folder folder = new Folder("电影");f3 = new VideoFile("3d肉蒲团");f4 = new VideoFile("一路向西");f5 = new VideoFile("公司职工");folder.add(f3);folder.add(f4);folder.add(f5);file.add(folder);file.remove(f2);Folder file1 = (Folder)file.get(1);file.killVirus();}
}
kill 我的收藏 folder
kill  不健康的图片.jpg virus
kill 电影 folder
kill  3d肉蒲团 virus
kill  一路向西 virus
kill  公司职工 virus 

总结:

我们在软件开发中,很多情况都遇到了组合模式,比如后台管理组织架构 树形开发等

当我们遇到树的时候,就可以尝试用这种设计模式来设计.

转载于:https://www.cnblogs.com/bj-xiaodao/p/10847781.html

再战设计模式(九)之组合模式相关推荐

  1. 设计模式笔记九:组合模式

    原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出.欢迎一起讨论. 组合模式(Composite Pattern) 又叫部分整体模式,是用于 ...

  2. 设计模式学习笔记(C++实现)(九)--组合模式

    1.组合模式简介 英文名称 Composite 主要目的 该模式将对象组合成树形结构已表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 使用场景 1.当 ...

  3. 小话设计模式(九)组合模式

    组合(Composite)模式将对象组合成树形结构以表示"部分-整体"的层次结构.这样使得用户对单个对象和组合对象的使用具有一致性. 组合模式,听名字你可能比较陌生,但是你很可能是 ...

  4. 设计模式笔记(9)---组合模式(结构型)

    Gof定义 将对象组合成树形结构以表示"部分--整体"的层次结构.Composite使得用户对单个对象和组合对象使用具有一致性. 在面向对象系统中,我们经常会遇到一类具有" ...

  5. 《研磨设计模式》chap15 组合模式(2)改写示例+总结

    1. 改写示例 在添加子组件的方法实现中,加入对父组件的引用实现.在删除子组件的方法实现中,加入把被删除的商品类别对象的父商品类别,设置成为被删除的商品类别的子类别的父商品类别的功能.实现新的返回组件 ...

  6. 组合模式_设计模式结构性:组合模式(CompositePattern)

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

  7. php 组合模式,php设计模式(十三)透明组合模式

    组合模式用来解决整体和部分可以一致对待的问题: 比如说 文件夹 和其下的 文件: 可以复制文件也可以复制整个文件夹: 组合模式是将对象组合成树形结构以表示整体和部分的层次结构: 可以方便的增加节点: ...

  8. Java 设计模式之 Composite 组合模式

    Composite  组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件:再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子. 这里以构造一棵 ...

  9. JAVA设计模式初探之组合模式

    先看看组合模式的定义吧:"将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性." 就拿剪发办卡的事情来分析一下吧. 首先,一张 ...

最新文章

  1. 高糊视频秒变4K,速度比TecoGAN快了9倍!东南大学提出新的视频超分辨率系统
  2. You are using pip version 8.1.1, however version 20.1.1 is available
  3. 机器学习中的数学(2)-线性回归,偏差、方差权衡
  4. linux bash脚本编程知识点
  5. 【C/C++高质量编程 笔记】
  6. php静态资源服务器,Node实现静态资源服务器
  7. What we find changes who we become.
  8. RPC 的超时设置,一不小心就是线上事故!
  9. Spinnaker:云原生多云环境持续部署的未来
  10. HTML lt input gt 标签,科技常识:使用amp;lt;labelamp;gt;标签修改input[type=checkbox]的样式...
  11. 模块已加载,但找不到入口点DLLRegisterServer
  12. java计算机毕业设计大学生旅游拼团网站源码+数据库+系统+lw文档+部署
  13. File Juicer for Mac(文件内容提取工具)
  14. Python 去除白色背景
  15. linux图片编辑器下载软件,Pix图片编辑器
  16. mysql 1436_MySQL错误1436:线程堆栈溢出,用简单的查询
  17. H5写搜索框:将搜索图标放入搜索框之内
  18. 基于openmv的汽车内后视镜
  19. 虚幻引擎图文笔记:使用MixamoConverter对Mixamo动画重定向成UESkeleton匹配动画
  20. Oracle中慎用Like等通配符

热门文章

  1. 简单的hangman游戏,完全代码
  2. 关于新型冠状病毒感染肺炎中国医学科学院专家组答疑解惑
  3. 逻辑面试题:3顶黑帽子,2顶白帽子,我戴的是黑帽子吗?
  4. 使用CSS给文字描边
  5. 领域驱动设计实现疑难解答(一):如何分包及组织工程结构
  6. 10-52 2-1-(e) 查询所有的男影星或者住址中含有4的影星 (10分
  7. 外媒评2013年十大创新社交媒体公司
  8. 港科百创 | 极目生物宣布引进FDA批准干眼治疗器械大中华区、韩国及东盟十国独家权益...
  9. 第二章网页前端基础与HTTP协议
  10. 数据库中exists的用法