组合模式
实验10:组合模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解组合模式的动机,掌握该模式的结构;
2、能够利用组合模式解决实际问题。
[实验任务]:组合模式
用透明组合模式实现教材中的“文件夹浏览”这个例子。
类图
源代码
public abstract class AbstractFile { public abstract void add(AbstractFile element); public abstract void remove(AbstractFile element); public abstract void display(); } import java.util.ArrayList; public class Folder extends AbstractFile { private ArrayList<AbstractFile> fileList = new ArrayList<>(); private String fileName; public Folder(String fileName) { this.fileName = fileName; } /** * 添加文件 */ @Override public void add(AbstractFile element) { fileList.add(element); // 获取类的简单名称 String elementName = element.getClass().getSimpleName(); //输出提示信息 System.out.println(fileName + "添加了一个" + elementName); } /** * 删除文件 */ @Override public void remove(AbstractFile element) { fileList.remove(element); // 获取类的简单名称 String elementName = element.getClass().getSimpleName(); //输出提示信息 System.out.println(fileName + "删除了一个" + elementName); } /** * 递归打印文件夹里的内容 */ @Override public void display() { System.out.println(fileName); System.out.println("-------" + fileName + "包括-------"); for (AbstractFile object : fileList) { object.display(); } } } public class ImageFile extends AbstractFile { private String fileName; public ImageFile(String fileName) { this.fileName = fileName; } @Override public void add(AbstractFile element) { System.out.println("add ImageFile"); } @Override public void remove(AbstractFile element) { System.out.println("remove ImageFile"); } @Override public void display() { System.out.print(fileName); System.out.println(" ImageFile"); } } public class TextFile extends AbstractFile { private String fileName; public TextFile(String fileName) { this.fileName = fileName; } @Override public void add(AbstractFile element) { System.out.println("add TextFile"); } @Override public void remove(AbstractFile element) { System.out.println("remove TextFile"); } @Override public void display() { System.out.print(fileName); System.out.println(" TextFile"); } } public class VideoFile extends AbstractFile { private String fileName; public VideoFile(String fileName) { this.fileName = fileName; } @Override public void add(AbstractFile element) { System.out.println("add VideoFile"); } @Override public void remove(AbstractFile element) { System.out.println("remove VideoFile"); } @Override public void display() { System.out.print(fileName); System.out.println(" VideoFile"); } }