admin管理员组

文章数量:1585025

题目:使用组合模式设计一个杀毒软件(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();
	}
}

运行结果:

本文标签: 模式组合杀毒软件结构