使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。
UML类图:
Java程序代码:
AbstractFile接口
public interface AbstractFile {
public void killVirus();
public void add(AbstractFile file);
public void remove(AbstractFile file);
public AbstractFile getChild(int index);
}
TextFile类
public class TextFile implements AbstractFile {
private String name;
public TextFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
}
@Override
public void remove(AbstractFile file) {
}
@Override
public AbstractFile getChild(int index) {
return null;
}
@Override
public void killVirus() {
System.out.println("Text文件-"+name+"正在杀毒!");
}
}
ImageFile类
public class ImageFile implements AbstractFile {
private String name;
public ImageFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
}
@Override
public void remove(AbstractFile file) {
}
@Override
public AbstractFile getChild(int index) {
return null;
}
@Override
public void killVirus() {
System.out.println("Image文件-"+name+"正在杀毒!");
}
}
VideoFile类
public class VideoFile implements AbstractFile {
private String name;
public VideoFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
}
@Override
public void remove(AbstractFile file) {
}
@Override
public AbstractFile getChild(int index) {
return null;
}
@Override
public void killVirus() {
System.out.println("Video文件-"+name+"正在杀毒!");
}
}
Folder类
import java.util.ArrayList;
import java.util.List;
public class Folder implements AbstractFile{
private String name;
private List<AbstractFile> list = new ArrayList<AbstractFile>();
public Folder(String name) {
this.name = name;
}
public void add(AbstractFile file) {
list.add(file);
}
public void remove(AbstractFile file) {
list.remove(file);
}
public AbstractFile getChild(int index) {
return list.get(index);
}
@Override
public void killVirus() {
System.out.println("Folder文件夹-"+name+"正在杀毒!");
for(AbstractFile file : list) {
file.killVirus();
}
}
}
Client客户端
public class Client {
public static void main(String[] args) {
Folder folder = new Folder("我的文件夹");
AbstractFile textFile = new TextFile("我的文本文件");
AbstractFile imageFile = new ImageFile("我的图像文件");
AbstractFile videoFile = new VideoFile("我的视频文件");
folder.add(textFile);
folder.add(imageFile);
folder.killVirus();
folder.remove(imageFile);
videoFile.killVirus();
}
}