11.19
实验10:组合模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解组合模式的动机,掌握该模式的结构;
2、能够利用组合模式解决实际问题。
[实验任务一]:组合模式
用透明组合模式实现教材中的“文件夹浏览”这个例子。
实验要求:
-
文件的执行不需真正实现,只需简单提示即可;
-
提交源代码;
package touming;
// 抽象文件类
public abstract class AbstractFile {
protected String fileName;
public AbstractFile(String fileName) {
this.fileName = fileName;
}
public abstract void add(AbstractFile element);
public abstract void remove(AbstractFile element);
public abstract void display();
}
package touming;
// 客户端测试代码
public class Client {
public static void main(String[] args) {
// 创建根文件夹
Folder rootFolder = new Folder("根文件夹");
// 创建子文件夹
Folder subFolder = new Folder("子文件夹");
// 创建文件
AbstractFile image = new ImageFile("图片.jpg");
AbstractFile text = new TextFile("文档.txt");
AbstractFile video = new VideoFile("视频.mp4");
// 组织结构
rootFolder.add(subFolder);
rootFolder.add(image);
subFolder.add(text);
subFolder.add(video);
// 显示文件夹结构
rootFolder.display();
}
}
package touming;
// 视频文件类
public class VideoFile extends AbstractFile {
public VideoFile(String fileName) {
super(fileName);
}
@Override
public void add(AbstractFile element) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile element) {
System.out.println("不支持该方法");
}
@Override
public void display() {
System.out.println("播放视频文件: " + fileName);
}
}
package touming;
// 文本文件类
public class TextFile extends AbstractFile {
public TextFile(String fileName) {
super(fileName);
}
@Override
public void add(AbstractFile element) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile element) {
System.out.println("不支持该方法");
}
@Override
public void display() {
System.out.println("显示文本文件: " + fileName);
}
}
package touming;
// 文件夹类
import java.util.ArrayList;
import java.util.List;
public class Folder extends AbstractFile {
private List<AbstractFile> fileList = new ArrayList<>();
public Folder(String fileName) {
super(fileName);
}
@Override
public void add(AbstractFile element) {
fileList.add(element);
}
@Override
public void remove(AbstractFile element) {
fileList.remove(element);
}
@Override
public void display() {
System.out.println("Folder: " + fileName);
for (AbstractFile file : fileList) {
file.display();
}
}
}
package touming;
// 图像文件类
public class ImageFile extends AbstractFile {
public ImageFile(String fileName) {
super(fileName);
}
@Override
public void add(AbstractFile element) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractFile element) {
System.out.println("不支持该方法");
}
@Override
public void display() {
System.out.println("显示图像文件: " + fileName);
}
}
3.注意编程规范。