再战设计模式(九)之组合模式
组合模式
工作流程分析
组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子
当容器对象的指定方法被调用时,将遍历整个树形结构,寻找包含整个方法的成员,并调用执行,其中,使用了递归调用的机制对整个结构进行处理
角色:
抽象组件角色: 定义了叶子和容器组件的共同点.下面的代码用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设计模式初探之组合模式
先看看组合模式的定义吧:"将对象组合成树形结构以表示'部分-整体'的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性." 就拿剪发办卡的事情来分析一下吧. 首先,一张 ...
最新文章
- 高糊视频秒变4K,速度比TecoGAN快了9倍!东南大学提出新的视频超分辨率系统
- You are using pip version 8.1.1, however version 20.1.1 is available
- 机器学习中的数学(2)-线性回归,偏差、方差权衡
- linux bash脚本编程知识点
- 【C/C++高质量编程 笔记】
- php静态资源服务器,Node实现静态资源服务器
- What we find changes who we become.
- RPC 的超时设置,一不小心就是线上事故!
- Spinnaker:云原生多云环境持续部署的未来
- HTML lt input gt 标签,科技常识:使用amp;lt;labelamp;gt;标签修改input[type=checkbox]的样式...
- 模块已加载,但找不到入口点DLLRegisterServer
- java计算机毕业设计大学生旅游拼团网站源码+数据库+系统+lw文档+部署
- File Juicer for Mac(文件内容提取工具)
- Python 去除白色背景
- linux图片编辑器下载软件,Pix图片编辑器
- mysql 1436_MySQL错误1436:线程堆栈溢出,用简单的查询
- H5写搜索框:将搜索图标放入搜索框之内
- 基于openmv的汽车内后视镜
- 虚幻引擎图文笔记:使用MixamoConverter对Mixamo动画重定向成UESkeleton匹配动画
- Oracle中慎用Like等通配符
热门文章
- 简单的hangman游戏,完全代码
- 关于新型冠状病毒感染肺炎中国医学科学院专家组答疑解惑
- 逻辑面试题:3顶黑帽子,2顶白帽子,我戴的是黑帽子吗?
- 使用CSS给文字描边
- 领域驱动设计实现疑难解答(一):如何分包及组织工程结构
- 10-52 2-1-(e) 查询所有的男影星或者住址中含有4的影星 (10分
- 外媒评2013年十大创新社交媒体公司
- 港科百创 | 极目生物宣布引进FDA批准干眼治疗器械大中华区、韩国及东盟十国独家权益...
- 第二章网页前端基础与HTTP协议
- 数据库中exists的用法