再战设计模式(九)之组合模式
组合模式
工作流程分析
组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子
当容器对象的指定方法被调用时,将遍历整个树形结构,寻找包含整个方法的成员,并调用执行,其中,使用了递归调用的机制对整个结构进行处理
角色:
抽象组件角色: 定义了叶子和容器组件的共同点.下面的代码用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
再战设计模式(九)之组合模式相关推荐
- 设计模式笔记九:组合模式
原文:http://www.runoob.com/design-pattern/ 少许个人理解,如有错误请指出.欢迎一起讨论. 组合模式(Composite Pattern) 又叫部分整体模式,是用于 ...
- 设计模式学习笔记(C++实现)(九)--组合模式
1.组合模式简介 英文名称 Composite 主要目的 该模式将对象组合成树形结构已表示"部分-整体"的层次结构,使得用户对单个对象和组合对象的使用具有一致性. 使用场景 1.当 ...
- 小话设计模式(九)组合模式
组合(Composite)模式将对象组合成树形结构以表示"部分-整体"的层次结构.这样使得用户对单个对象和组合对象的使用具有一致性. 组合模式,听名字你可能比较陌生,但是你很可能是 ...
- 设计模式笔记(9)---组合模式(结构型)
Gof定义 将对象组合成树形结构以表示"部分--整体"的层次结构.Composite使得用户对单个对象和组合对象使用具有一致性. 在面向对象系统中,我们经常会遇到一类具有" ...
- 《研磨设计模式》chap15 组合模式(2)改写示例+总结
1. 改写示例 在添加子组件的方法实现中,加入对父组件的引用实现.在删除子组件的方法实现中,加入把被删除的商品类别对象的父商品类别,设置成为被删除的商品类别的子类别的父商品类别的功能.实现新的返回组件 ...
- 组合模式_设计模式结构性:组合模式(CompositePattern)
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...
- php 组合模式,php设计模式(十三)透明组合模式
组合模式用来解决整体和部分可以一致对待的问题: 比如说 文件夹 和其下的 文件: 可以复制文件也可以复制整个文件夹: 组合模式是将对象组合成树形结构以表示整体和部分的层次结构: 可以方便的增加节点: ...
- Java 设计模式之 Composite 组合模式
Composite 组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件:再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子. 这里以构造一棵 ...
- JAVA设计模式初探之组合模式
先看看组合模式的定义吧:"将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性." 就拿剪发办卡的事情来分析一下吧. 首先,一张 ...
最新文章
- python 交互图形 bokeh学习总结
- Spark详解(九):Spark存储原理分析
- 美国国防部CIO:企业IT可考虑用开源做数据分析
- 【CyberSecurityLearning 53】信息收集
- 百度开发者中心全新升级 | 文末六一送福利
- mysql root 访问被拒绝_用户'root'@'localhost'的访问被拒绝-Spring Boot和MySQL连接
- jakarta ee_Jakarta EE的拟议命名空间
- 卷积面试题(最重要)
- VC6.0设置注释快捷键
- 带括号多项式版四则运算
- egg结合mysql如何做数据返回_egg-mysql使用体验和笔记
- 基于java springboot活动报名微信小程序源码(毕设)
- 实战SATA硬盘安装64位XP(转)
- 双android系统pcb整合,基于Android的大屏幕拼接显示系统研究与实现
- 怎么登陆163邮箱?163的邮箱有哪些实用技巧?
- ATFX:道琼斯指数的反弹,11月能否突破35000关口?
- Java面试宝典_君哥讲解笔记04_java基础面试题——String s=new String(“xyz“);创建了几个String Object、equals和hashCode、hashCode(
- RK3399平台开发系列讲解(其他篇)1.11、CPU如何定频
- 6.30 Java(农夫果园【1】:一个农场,专门种植销售各类水果,在这个系统中需要描述下列水果葡萄、草莓、苹果)
- 手游热更新方案xLua开源:Unity3D下Lua编程解决方案
热门文章
- 文华期货数据格式解析 文华数据格式转换软件
- CSS--层叠样式表
- 什么是IMAP?什么是POP3?
- rollbackFailedOptional: verb npm-session 890a4216295e46a7
- TIA Portal V17正式来临,官方链接\ 百度网盘同步下载~
- R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)
- 对json串的解析 fastjson gson ajax异步刷新
- 挂载(具名挂载、匿名挂载)
- 【微信小程序】e.target.id和e.currentTarget.dataset.id的区别
- 1.Excel vba开发-处理空格数据