组合设计模式(文件删除)
0. UML结构图
1. 基础接口
1.1 抽象组件
public interface Component {
void delete();
}
1.2 容器节点
public interface Composite extends Component {
void add(Component component);
void remove(Component component);
Component getChild(int index);
}
1.3 叶子节点
public interface Leaf extends Component {
}
2. 组合模式实现文件删除
2.1 文本文件
public class TextFile implements Component {
private String name;
public TextFile(String name) {
this.name = name;
}
@Override
public void delete() {
System.out.println(name + " TextFile.delete");
}
}
2.2 图像文件
public class ImageFile implements Component {
private String name;
public ImageFile(String name) {
this.name = name;
}
@Override
public void delete() {
System.out.println(name + " ImageFile.delete");
}
}
2.3 视频文件
public class VideoFile implements Component {
private String name;
public VideoFile(String name) {
this.name = name;
}
@Override
public void delete() {
System.out.println(name + " VideoFile.delete");
}
}
2.4 目录
public class Directory implements Composite {
private String name;
private List<Component> files = new ArrayList<>();
public Directory(String name) {
this.name = name;
}
@Override
public void delete() {
for (Component component : files) {
component.delete();
}
System.out.println(name + " Directory.delete");
}
@Override
public void add(Component component) {
files.add(component);
}
@Override
public void remove(Component component) {
files.remove(component);
}
@Override
public Component getChild(int index) {
return files.get(index);
}
}
3. 文件删除Test
public class CompositeTest {
public static void main(String[] args) {
Composite rootDir = new Directory("我的收藏");
Composite imageDir = new Directory("图片");
rootDir.add(imageDir);
Composite sceneryImage1Dir = new Directory("风景图");
imageDir.add(sceneryImage1Dir);
Composite videoDir = new Directory("视频");
rootDir.add(videoDir);
Composite textDir = new Directory("文档");
rootDir.add(textDir);
Component imageA = new ImageFile("AAAA.png");
imageDir.add(imageA);
Component imageB = new ImageFile("BBBB.png");
imageDir.add(imageB);
Component imageC = new ImageFile("风景CCC.png");
sceneryImage1Dir.add(imageC);
Component videoQ = new VideoFile("QQQQ.mp4");
videoDir.add(videoQ);
Component textS = new TextFile("SSSS.txt");
textDir.add(textS);
System.out.println("====== 删除-图片 ======");
imageDir.delete();
System.out.println("====== 删除-我的收藏 ======");
rootDir.delete();
}
}