树形结构的处理—组合模式(三)
11.3 完整解决方案
图11-5
-
import
java.util.*; -
-
//抽象文件类:抽象构件
-
abstract
class AbstractFile { -
public abstract void add(AbstractFile file); -
public abstract void remove(AbstractFile file); -
public abstract AbstractFile intgetChild( i); -
public abstract void killVirus(); - }
-
-
//图像文件类:叶子构件
-
class
ImageFile extendsAbstractFile { -
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 intgetChild( i) { -
System.out.println("对不起,不支持该方法!"); -
return null; -
} -
-
public void killVirus() { -
//模拟杀毒 -
System.out.println("----对图像文件'" + "'进行杀毒");name + -
} - }
-
-
//文本文件类:叶子构件
-
class
TextFile extendsAbstractFile { -
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 intgetChild( i) { -
System.out.println("对不起,不支持该方法!"); -
return null; -
} -
-
public void killVirus() { -
//模拟杀毒 -
System.out.println("----对文本文件'" + "'进行杀毒");name + -
} - }
-
-
//视频文件类:叶子构件
-
class
VideoFile extendsAbstractFile { -
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 intgetChild( i) { -
System.out.println("对不起,不支持该方法!"); -
return null; -
} -
-
public void killVirus() { -
//模拟杀毒 -
System.out.println("----对视频文件'" + "'进行杀毒");name + -
} - }
-
-
//文件夹类:容器构件
-
class
Folder extendsAbstractFile { -
//定义集合fileList,用于存储AbstractFile类型的成员 -
private ArrayList newfileList= ArrayList(); -
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 intgetChild( i) { -
return (AbstractFile)fileList.get(i); -
} -
-
public void killVirus() { -
System.out.println("****对文件夹'" + "'进行杀毒");name + -
-
//递归调用成员构件的killVirus()方法 -
for(Object obj : fileList) { -
((AbstractFile)obj).killVirus(); -
} -
} - }
-
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(); -
} - }
****对文件夹'Sunny的资料'进行杀毒 ****对文件夹'图像文件'进行杀毒 ----对图像文件'小龙女.jpg'进行杀毒 ----对图像文件'张无忌.gif'进行杀毒 ****对文件夹'文本文件'进行杀毒 ----对文本文件'九阴真经.txt'进行杀毒 ----对文本文件'葵花宝典.doc'进行杀毒 ****对文件夹'视频文件'进行杀毒 ----对视频文件'笑傲江湖.rmvb'进行杀毒 |
folder1.killVirus(); |
folder3.killVirus(); |
****对文件夹'文本文件'进行杀毒 ----对文本文件'九阴真经.txt'进行杀毒 ----对文本文件'葵花宝典.doc'进行杀毒 |
【作者:刘伟