结构型模式之组合模式(杀毒软件)

题目:使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本包括TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。

类图


代码

package 组合模式实例之杀毒软件;

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();  
} 
package 组合模式实例之杀毒软件;

 
class ImageFile extends AbstractFile {		//图像文件类:叶子构件 
  private String name;  
    
  public ImageFile(String name) {  
      this.name = name;  
  }  
    
  public void add(AbstractFile file) {  
     System.out.println("对不起,不支持该方法!");  
  }  
    
  public void remove(AbstractFile file) {  
      System.out.println("对不起,不支持该方法!");  
  }  
    
  public AbstractFile getChild(int i) {  
      System.out.println("对不起,不支持该方法!");  
      return null;  
  }  
    
  public void killVirus() {  
      //模拟杀毒  
      System.out.println("----对图像文件'" + name + "'进行杀毒");  
  }  
}
package 组合模式实例之杀毒软件;

class TextFile extends AbstractFile {		//文本文件类:叶子构件  
  private String name;  
    
  public TextFile(String name) {  
      this.name = name;  
  }  
    
  public void add(AbstractFile file) {  
     System.out.println("对不起,不支持该方法!");  
  }  
    
  public void remove(AbstractFile file) {  
      System.out.println("对不起,不支持该方法!");  
  }  
    
  public AbstractFile getChild(int i) {  
      System.out.println("对不起,不支持该方法!");  
      return null;  
  }  
    
  public void killVirus() {  
      //模拟杀毒  
      System.out.println("----对文本文件'" + name + "'进行杀毒");  
  }  
}
package 组合模式实例之杀毒软件;

class VideoFile extends AbstractFile {		//视频文件类:叶子构件    
  private String name;  
    
  public VideoFile(String name) {  
      this.name = name;  
  }  
    
  public void add(AbstractFile file) {  
     System.out.println("对不起,不支持该方法!");  
  }  
    
  public void remove(AbstractFile file) {  
      System.out.println("对不起,不支持该方法!");  
  }  
    
  public AbstractFile getChild(int i) {  
      System.out.println("对不起,不支持该方法!");  
      return null;  
  }  
    
  public void killVirus() {  
      //模拟杀毒  
      System.out.println("----对视频文件'" + name + "'进行杀毒");  
  }  
}  
package 组合模式实例之杀毒软件;

import java.util.ArrayList;

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();  
      }  
  }  
}  
package 组合模式实例之杀毒软件;

class Client {		//客户端类
	public static void main(String args[]) {
        //针对抽象构件编程
		AbstractFile file1,file2,file3,file4,file5,folder1,folder2,folder3,folder4;
		
		folder1 = new Folder("Sunny的资料");
		folder2 = new Folder("图像文件");
		folder3 = new Folder("文本文件");
		folder4 = new Folder("视频文件");
		
		file1 = new ImageFile("小龙女.jpg");
		file2 = new ImageFile("张无忌.gif");
		file3 = new TextFile("九阴真经.txt");
		file4 = new TextFile("葵花宝典.doc");
		file5 = new VideoFile("笑傲江湖.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);
		
        //从“Sunny的资料”节点开始进行杀毒操作
		folder1.killVirus();
	}
}
运行效果图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值