java使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某一个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件中包括文本文件TextFile,图片文件ImageFile,视频文件VideoFile。
时间: 2024-05-14 09:14:14 浏览: 29
首先,我们需要定义一个抽象的“可杀毒”的接口,包含一个杀毒的方法:
```java
public interface Killable {
void killVirus();
}
```
然后,我们定义一个抽象的“文件”类,实现“可杀毒”的接口,包含文件的基本属性和方法:
```java
public abstract class AbstractFile implements Killable {
private String name; // 文件名
private int size; // 文件大小
public AbstractFile(String name, int size) {
this.name = name;
this.size = size;
}
public String getName() {
return name;
}
public int getSize() {
return size;
}
public abstract void killVirus();
}
```
接下来,我们定义具体的文件类型,包括文本文件、图片文件和视频文件,它们都继承自“文件”类,实现各自的“杀毒”方法:
```java
public class TextFile extends AbstractFile {
public TextFile(String name, int size) {
super(name, size);
}
@Override
public void killVirus() {
System.out.println("对文本文件" + getName() + "进行杀毒");
}
}
public class ImageFile extends AbstractFile {
public ImageFile(String name, int size) {
super(name, size);
}
@Override
public void killVirus() {
System.out.println("对图片文件" + getName() + "进行杀毒");
}
}
public class VideoFile extends AbstractFile {
public VideoFile(String name, int size) {
super(name, size);
}
@Override
public void killVirus() {
System.out.println("对视频文件" + getName() + "进行杀毒");
}
}
```
接下来,我们定义一个“文件夹”类,它包含了多个文件,可以对整个文件夹进行杀毒:
```java
public class Folder implements Killable {
private List<Killable> fileList = new ArrayList<>(); // 文件夹中包含的文件列表
private String name; // 文件夹名
public Folder(String name) {
this.name = name;
}
public void addFile(Killable file) {
fileList.add(file);
}
public void removeFile(Killable file) {
fileList.remove(file);
}
@Override
public void killVirus() {
System.out.println("对文件夹" + name + "进行杀毒");
for (Killable file : fileList) {
file.killVirus();
}
}
}
```
最后,我们可以通过组合的方式,将“文件”和“文件夹”组合起来,实现对整个文件夹或单个文件的杀毒操作:
```java
public class AntiVirus {
public static void main(String[] args) {
Folder folder = new Folder("myFolder");
folder.addFile(new TextFile("abc.txt", 100));
folder.addFile(new ImageFile("def.jpg", 200));
folder.addFile(new VideoFile("ghi.mp4", 300));
folder.killVirus();
TextFile textFile = new TextFile("jkl.txt", 50);
textFile.killVirus();
}
}
```
输出结果:
```
对文件夹myFolder进行杀毒
对文本文件abc.txt进行杀毒
对图片文件def.jpg进行杀毒
对视频文件ghi.mp4进行杀毒
对文本文件jkl.txt进行杀毒
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)