组合模式

工作流程分析

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

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

角色:

抽象组件角色: 定义了叶子和容器组件的共同点.下面的代码用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. python 交互图形 bokeh学习总结
  2. Spark详解(九):Spark存储原理分析
  3. 美国国防部CIO:企业IT可考虑用开源做数据分析
  4. 【CyberSecurityLearning 53】信息收集
  5. 百度开发者中心全新升级 | 文末六一送福利
  6. mysql root 访问被拒绝_用户'root'@'localhost'的访问被拒绝-Spring Boot和MySQL连接
  7. jakarta ee_Jakarta EE的拟议命名空间
  8. 卷积面试题(最重要)
  9. VC6.0设置注释快捷键
  10. 带括号多项式版四则运算
  11. egg结合mysql如何做数据返回_egg-mysql使用体验和笔记
  12. 基于java springboot活动报名微信小程序源码(毕设)
  13. 实战SATA硬盘安装64位XP(转)
  14. 双android系统pcb整合,基于Android的大屏幕拼接显示系统研究与实现
  15. 怎么登陆163邮箱?163的邮箱有哪些实用技巧?
  16. ATFX:道琼斯指数的反弹,11月能否突破35000关口?
  17. Java面试宝典_君哥讲解笔记04_java基础面试题——String s=new String(“xyz“);创建了几个String Object、equals和hashCode、hashCode(
  18. RK3399平台开发系列讲解(其他篇)1.11、CPU如何定频
  19. 6.30 Java(农夫果园【1】:一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果葡萄、草莓、苹果)
  20. 手游热更新方案xLua开源:Unity3D下Lua编程解决方案

热门文章

  1. 文华期货数据格式解析 文华数据格式转换软件
  2. CSS--层叠样式表
  3. 什么是IMAP?什么是POP3?
  4. rollbackFailedOptional: verb npm-session 890a4216295e46a7
  5. TIA Portal V17正式来临,官方链接\ 百度网盘同步下载~
  6. R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)
  7. 对json串的解析 fastjson gson ajax异步刷新
  8. 挂载(具名挂载、匿名挂载)
  9. 【微信小程序】e.target.id和e.currentTarget.dataset.id的区别
  10. 1.Excel vba开发-处理空格数据