组合模式
[实验任务一]:组合模式
用透明组合模式实现教材中的“文件夹浏览”这个例子。
实验要求:
1.文件的执行不需真正实现,只需简单提示即可;
2.提交源代码;
3.注意编程规范。
- 类图:
- 源代码
import java.util.ArrayList;
import java.util.List;
// 抽象组件类,表示文件和文件夹的通用接口
abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
// 显示文件或文件夹结构
public abstract void display(String indent);
}
// 具体的文件类
class File extends Component {
public File(String name) {
super(name);
}
@Override
public void display(String indent) {
System.out.println(indent + "- 文件: " + name);
}
}
// 具体的文件夹类
class Folder extends Component {
private List<Component> components = new ArrayList<>();
public Folder(String name) {
super(name);
}
// 添加子组件(文件或文件夹)
public void add(Component component) {
components.add(component);
}
// 删除子组件
public void remove(Component component) {
components.remove(component);
}
@Override
public void display(String indent) {
System.out.println(indent + "+ 文件夹: " + name);
for (Component component : components) {
component.display(indent + " ");
}
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
// 创建根文件夹
Folder root = new Folder("根目录");
// 在根目录下添加文件和文件夹
root.add(new File("文件1.txt"));
root.add(new File("文件2.txt"));
Folder subFolder1 = new Folder("子文件夹1");
subFolder1.add(new File("文件3.txt"));
root.add(subFolder1);
Folder subFolder2 = new Folder("子文件夹2");
subFolder2.add(new File("文件4.txt"));
subFolder1.add(subFolder2);
// 显示整个文件夹结构
root.display("");
}
}