树形结构的处理—组合模式(一)
11.1 设计杀毒软件的框架结构
|
图11-1 Windows目录结构
图11-2 树形目录结构示意图
-
//为了突出核心框架代码,我们对杀毒过程的实现进行了大量简化
-
import
java.util.*; -
-
//图像文件类
-
class
ImageFile { -
private String name; -
-
public ImageFile(String name) { -
this.name = name; -
} -
-
public void killVirus() { -
//简化代码,模拟杀毒 -
System.out.println("----对图像文件'" + "'进行杀毒");name + -
} - }
-
-
//文本文件类
-
class
TextFile { -
private String name; -
-
public TextFile(String name) { -
this.name = name; -
} -
-
public void killVirus() { -
//简化代码,模拟杀毒 -
System.out.println("----对文本文件'" + "'进行杀毒");name + -
} - }
-
- //文件夹类
-
class
Folder { -
private String name; -
//定义集合folderList,用于存储Folder类型的成员 -
private ArrayList newfolderList = ArrayList();
-
-
//定义集合imageList,用于存储ImageFile类型的成员 -
private ArrayList newimageList = ArrayList();
-
-
//定义集合textList,用于存储TextFile类型的成员 -
private ArrayList newtextList = ArrayList(); -
-
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); -
} -
-
//需提供三个不同的方法removeFolder()、removeImageFile()和removeTextFile()来删除成员,代码省略 -
-
//需提供三个不同的方法getChildFolder(int i)、getChildImageFile(int i)和getChildTextFile(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(); -
} -
} - }
-
class
Client { -
public static void main(String args[]) { -
Folder folder1,folder2,folder3; -
folder1 = new Folder( "Sunny的资料"); -
folder2 = new Folder( "图像文件"); -
folder3 = new Folder( "文本文件"); -
-
ImageFile image1,image2; -
image1 = new ImageFile( "小龙女.jpg"); -
image2 = new ImageFile( "张无忌.gif"); -
-
TextFile text1,text2; -
text1 = new TextFile( "九阴真经.txt"); -
text2 = new TextFile( "葵花宝典.doc"); -
-
folder2.addImageFile(image1); -
folder2.addImageFile(image2); -
folder3.addTextFile(text1); -
folder3.addTextFile(text2); -
folder1.addFolder(folder2); -
folder1.addFolder(folder3); -
-
folder1.killVirus(); -
} - }
****对文件夹'Sunny的资料'进行杀毒 ****对文件夹'图像文件'进行杀毒 ----对图像文件'小龙女.jpg'进行杀毒 ----对图像文件'张无忌.gif'进行杀毒 ****对文件夹'文本文件'进行杀毒 ----对文本文件'九阴真经.txt'进行杀毒 ----对文本文件'葵花宝典.doc'进行杀毒 |
【作者:刘伟 http://blog.csdn.net/lovelion】