再战设计模式(九)之组合模式
作者:互联网
组合模式
工作流程分析
组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子
当容器对象的指定方法被调用时,将遍历整个树形结构,寻找包含整个方法的成员,并调用执行,其中,使用了递归调用的机制对整个结构进行处理
角色:
抽象组件角色: 定义了叶子和容器组件的共同点.下面的代码用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; } @Override public void killVirus() { System.out.println("kill " + name + " virus "); } } class VideoFile implements AbstractFile { private String name; public VideoFile(String name) { this.name = name; } @Override public void killVirus() { System.out.println("kill " + name + " virus "); } } class TextFile implements AbstractFile { private String name; public TextFile(String name) { this.name = name; } @Override public 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); } @Override public 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
总结:
我们在软件开发中,很多情况都遇到了组合模式,比如后台管理组织架构 树形开发等
当我们遇到树的时候,就可以尝试用这种设计模式来设计.
标签:name,组合,AbstractFile,再战,kill,file,设计模式,public,String 来源: https://www.cnblogs.com/bj-xiaodao/p/10847781.html