Loading... ## 定义 组合多个对象用来表示具有"整体-部分"关系的层次结构。它是一种对象结构型模式。 ![目录与文件具有整体-部分层次关系](https://s1.ax1x.com/2020/05/22/YOUiwj.png) 所以目录与文件可以利用组合模式。 ---------- ## UML示例 ![组合模式](https://s1.ax1x.com/2020/05/22/YOJVMQ.png) ## 代码示例 ### 抽象构件 ```java // 抽象构件 abstract class AbstractFile { protected String name; public abstract void add(AbstractFile file); public abstract void remove(AbstractFile file); public abstract AbstractFile getChild(int i); public abstract void killVirus(); } ``` ### 叶子构件1 ```java // 图像文件类:叶子构件 public class ImageFile extends AbstractFile { public ImageFile(String name) { this.name = name; } public void add(AbstractFile file) { System.out.println("不支持"); } public void remove(AbstractFile file) { System.out.println("不支持"); } public AbstractFile getChild(int i) { System.out.println("不支持"); return null; } public void killVirus() { System.out.println("对图像文件 <" + name + "> 进行杀毒"); } } ``` ### 叶子构件2 ```java // 文本文件类:叶子构件 public class TextFile extends AbstractFile{ public TextFile(String name) { this.name = name; } public void add(AbstractFile file) { System.out.println("不支持"); } public void remove(AbstractFile file) { System.out.println("不支持"); } public AbstractFile getChild(int i) { System.out.println("不支持"); return null; } public void killVirus() { System.out.println("对文本文件 <" + name + "> 进行杀毒"); } } ``` ### 容器构件 ```java // 文件夹类:容器构件 public class Folder extends AbstractFile { // 定义集合fileList 储存AbstractFile 类成员 private ArrayList<AbstractFile> fileList = new ArrayList<AbstractFile>(); public Folder(String name) { this.name = name; } public void add(AbstractFile file) { fileList.add(file); } public void remove(AbstractFile file) { fileList.remove(file); } public AbstractFile getChild(int i) { return fileList.get(i); } public void killVirus() { System.out.println("---对文件夹 <" + name + "> 进行杀毒----"); for (AbstractFile obj : fileList) { obj.killVirus(); } } } ``` ### 客户端 ```java public class Client { public static void main(String[] args) { AbstractFile file1, file2, file3, file4, file5, folder1, folder2, folder3; folder1 = new Folder("Sunny的资料"); folder2 = new Folder("图像资料"); folder3 = new Folder("文本文件"); file1 = new ImageFile("小龙女.jpg"); file2 = new ImageFile("张无忌.gif"); file3 = new TextFile("杂乱的资料.txt"); file4 = new TextFile("葵花宝典.txt"); file5 = new TextFile("笑傲江湖.txt"); folder1.add(file3); folder2.add(file1); folder2.add(file2); folder3.add(file4); folder3.add(file5); folder1.add(folder2); folder1.add(folder3); folder1.killVirus(); } } ``` 最后修改:2020 年 05 月 22 日 02 : 48 PM © 允许规范转载