admin管理员组文章数量:1585014
题目:使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以读某个制定的文件(File)进行杀毒,文件类型可以文本文件TextFile、图片文件ImageFile或视频文件VideoFile,请绘制其类图并编程实现。
类图:
代码部分:
AbstractFile类:
package AbstractFile;
/**抽象文件类:抽象构件*/
abstract class AbstractFile {
public abstract void add(AbstractFile file);
public abstract void remove(AbstractFile file);
public abstract AbstractFile getChild(int i);
public abstract void killVirus();
}
ImageFile类:
package AbstractFile;
/**图像文件类:叶子构件*/
public class ImageFile extends AbstractFile{
private String name;
public ImageFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("对不起,不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("对不起,不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
System.out.println("对不起,不支持该方法");
return null;
}
@Override
public void killVirus() {
//模拟杀毒
System.out.println("----对图像文件" + name + "进行杀毒");
}
}
TextFile类:
package AbstractFile;
/**文本文件类:叶子构件*/
public class TextFile extends AbstractFile{
private String name;
public TextFile(String name) {
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("对不起,不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("对不起,不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
System.out.println("对不起,不支持该方法");
return null;
}
@Override
public void killVirus() {
//模拟杀毒
System.out.println("----对图像文件" + name + "进行杀毒");
}
}
VideoFile类:
package AbstractFile;
/**视频文件类:叶子构件 */
public class VideoFile extends AbstractFile{
private String name;
public VideoFile(String name) {
super();
this.name = name;
}
@Override
public void add(AbstractFile file) {
System.out.println("对不起,不支持该方法");
}
@Override
public void remove(AbstractFile file) {
System.out.println("对不起,不支持该方法");
}
@Override
public AbstractFile getChild(int i) {
System.out.println("对不起,不支持该方法");
return null;
}
@Override
public void killVirus() {
//模拟杀毒
System.out.println("----对视频文件" + name + "进行杀毒");
}
}
Folder类:
package AbstractFile;
import java.util.ArrayList;
/**文件夹类:容器构件 */
public class Folder extends AbstractFile {
//定义集合fileList,用于存储AbstractFile类型的成员
private ArrayList<AbstractFile> fileList=new ArrayList<AbstractFile>();
private String name;
public Folder(String name) {
this.name = name;
}
public void add(AbstractFile file) {
fileList.add(file);
}
public void remove(AbstractFile file) {
fileList.remove(file);
}
public AbstractFile getChild(int i) {
return (AbstractFile)fileList.get(i);
}
public void killVirus() {
//模拟杀毒
System.out.println("****对文件夹" + name + "进行杀毒");
//递归调用成员构件的killVirus()方法
for(Object obj : fileList) {
((AbstractFile)obj).killVirus();
}
}
}
Client类:
package AbstractFile;
/**客户端类*/
public class Client {
public static void main(String args[]) {
//针对抽象构件编程
AbstractFile file1,file2,file3,file4,file5,folder1,folder2,folder3,folder4;
folder1 = new Folder("喻言的资料");
folder2 = new Folder("图像文件");
folder3 = new Folder("文本文件");
folder4 = new Folder("视频文件");
file1 = new ImageFile("1.jpg");
file2 = new ImageFile("2.gif");
file3 = new TextFile("经典语录.txt");
file4 = new TextFile("yy.doc");
file5 = new VideoFile("青春有你2.rmvb");
folder2.add(file1);
folder2.add(file2);
folder3.add(file3);
folder3.add(file4);
folder4.add(file5);
folder1.add(folder2);
folder1.add(folder3);
folder1.add(folder4);
//从“喻言的资料”节点开始进行杀毒操作
folder1.killVirus();
}
}
运行结果:
版权声明:本文标题:结构型模式之组合模式(杀毒软件) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727958263a1139580.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论