admin管理员组文章数量:1585018
实例要求:使用组合模式设计一个杀毒软件框架,该软件既可以对某个文件夹杀毒,也可以对某个指定的文件杀毒,文件种类包括文本文件、图片文件、视频文件。
实现截图:
先上UML图:
ImageFile.java (VideoFile合并到ImageFile.java中了,有需要的话可以自行拆开)
class ImageFile {
private String name;
public ImageFile(String name) {
this.name = name;
}
public void killVirus() {
//模拟杀毒
System.out.println("----对图像文件'" + name + "'进行杀毒");
}
}
TextFile.java
//文本文件类
class TextFile {
private String name;
public TextFile(String name) {
this.name = name;
}
public void killVirus() {
//模拟杀毒
System.out.println("----对文本文件'" + name + "'进行杀毒");
}
}
Folder.java
//文件夹类
class Folder {
private String name;
//定义集合folderList,用于存储Folder类型的成员
private ArrayList<Folder> folderList = new ArrayList<Folder>();
//定义集合imageList,用于存储ImageFile类型的成员
private ArrayList<ImageFile> imageList = new ArrayList<ImageFile>();
//定义集合textList,用于存储TextFile类型的成员
private ArrayList<TextFile> textList = new ArrayList<TextFile>();
//定义集合movieList,用于存储MovieFile类型的成员
private ArrayList<MovieFile> movieList = new ArrayList<MovieFile>();
public Folder(String name) {
this.name = name;
}
//增加新的Folder类型的成员
public void addFolder(Folder f) {
folderList.add(f);
}
//增加新的ImageFile类型的成员
public void addImageFile(ImageFile image) {
imageList.add(image);
}
//增加新的TextFile类型的成员
public void addTextFile(TextFile text) {
textList.add(text);
}
//增加新的MovieFile类型的成员
public void addMovieFile(MovieFile movie) {
movieList.add(movie);
}
//需提供四个不同的方法removeFolder()、removeImageFile()和removeTextFile()和removeMovieFile()来删除成员,代码省略
//需提供四个不同的方法getChildFolder(int i)、getChildImageFile(int i)和getChildTextFile(int i)和getChildMovieFile(int i)来获取成员,代码省略
public void killVirus() {
System.out.println("****对文件夹'" + name + "'进行杀毒"); //模拟杀毒
//如果是Folder类型的成员,递归调用Folder的killVirus()方法
for(Object obj : folderList) {
((Folder)obj).killVirus();
}
//如果是ImageFile类型的成员,调用ImageFile的killVirus()方法
for(Object obj : imageList) {
((ImageFile)obj).killVirus();
}
//如果是TextFile类型的成员,调用TextFile的killVirus()方法
for(Object obj : textList) {
((TextFile)obj).killVirus();
}
//如果是MovieFile类型的成员,调用MovieFile的killVirus()方法
for(Object obj : movieList) {
((MovieFile)obj).killVirus();
}
}
}
test.java
public class shijian2_zuhemoshi {
public static void main(String args[]) {
Folder folder1, folder2, folder3, folder4;
folder1 = new Folder("txt文档包");
folder2 = new Folder("img文件包");
folder3 = new Folder("文本文件");
folder4 = new Folder("视频文件包");
ImageFile image1,image2;
image1 = new ImageFile("s1.jpg");
image2 = new ImageFile("影流之主.gif");
TextFile text1,text2;
text1 = new TextFile("今天要写小说么.txt");
text2 = new TextFile("设计模式报告.doc");
MovieFile movie1,movie2;
movie1 = new MovieFile("Phoenix.mov");
movie2 = new MovieFile("KDA.mp4");
folder2.addImageFile(image1);
folder2.addImageFile(image2);
folder3.addTextFile(text1);
folder3.addTextFile(text2);
folder4.addMovieFile(movie1);
folder4.addMovieFile(movie2);
folder1.addFolder(folder2);
folder1.addFolder(folder3);
folder1.addFolder(folder4);
folder1.killVirus();
}
}
版权声明:本文标题:杀毒软件(设计模式--组合模式) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1727958372a1139587.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论