package com.iter.devbox.composite;
import java.util.ArrayList;
import java.util.List;
/**
* 抽象构件
* @author Shearer
*
*/
public interface AbstractFile {
void killVirus(); //杀毒
}
class ImageFile implements AbstractFile {
private String name;
public ImageFile(String name) {
this.name = name;
}
@Override
public void killVirus() {
System.out.println("---图像文件:" + name + "进行查杀!");
}
}
class TextFile implements AbstractFile {
private String name;
public TextFile(String name) {
this.name = name;
}
@Override
public void killVirus() {
System.out.println("---文本文件:" + name + "进行查杀!");
}
}
class VideoFile implements AbstractFile {
private String name;
public VideoFile(String name) {
this.name = name;
}
@Override
public void killVirus() {
System.out.println("---视频文件:" + name + "进行查杀!");
}
}
//文件夹(接口)
interface IFolder extends AbstractFile {
void add(AbstractFile f);
void remove(AbstractFile f);
AbstractFile getChild(int index);
}
//文件夹(实现类)
class Folder implements IFolder {
private String name;
private List<AbstractFile> list = new ArrayList<AbstractFile>();
public Folder(String name) {
this.name = name;
}
public void add(AbstractFile f) {
list.add(f);
}
public void remove(AbstractFile f) {
list.remove(f);
}
public AbstractFile getChild(int index) {
return list.get(index);
}
@Override
public void killVirus() {
System.out.println("---文件夹:" + name + "进行查杀!");
for (AbstractFile file : list) {
file.killVirus();
}
}
}
package com.iter.devbox.composite;
public class Client {
public static void main(String[] args) {
AbstractFile file1 = new ImageFile("cat.jpg");
AbstractFile file2 = new TextFile("readme.txt");
AbstractFile file3 = new VideoFile("海贼王01.mp4");
IFolder folder = new Folder("文件夹01");
IFolder subFolder = new Folder("文件夹02");
folder.add(file1);
folder.add(subFolder);
subFolder.add(file2);
subFolder.add(file3);
folder.killVirus();
}
}
运行结果:
---文件夹:文件夹01进行查杀!
---图像文件:cat.jpg进行查杀!
---文件夹:文件夹02进行查杀!
---文本文件:readme.txt进行查杀!
---视频文件:海贼王01.mp4进行查杀!