11.3 完整解决方案
为了让系统具备更好的灵活性和可扩展性,客户端能够一致地对待文件和文件夹,Sunny公司开发人员使用组合模式来进行杀毒软件的框架设计,其基本结构如图11-5所示:java

图11-5 杀毒软件框架设计结构图编程
在图11-5中, AbstractFile充当抽象构件类,Folder充当容器构件类,ImageFile、TextFile和VideoFile充当叶子构件类。完整代码以下所示:框架
编写以下客户端测试代码:ide
- 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的资料'进行杀毒this ****对文件夹'图像文件'进行杀毒spa ----对图像文件'小龙女.jpg'进行杀毒.net ----对图像文件'张无忌.gif'进行杀毒设计 ****对文件夹'文本文件'进行杀毒视频 ----对文本文件'九阴真经.txt'进行杀毒 ----对文本文件'葵花宝典.doc'进行杀毒 ****对文件夹'视频文件'进行杀毒 ----对视频文件'笑傲江湖.rmvb'进行杀毒 |
因为在本实例中使用了组合模式,在抽象构件类中声明了全部方法,包括用于管理和访问子构件的方法,如add()方法和remove()方法等,所以在ImageFile等叶子构件类中实现这些方法时必须进行相应的异常处理或错误提示。在容器构件类Folder的killVirus()方法中将递归调用其成员对象的killVirus()方法,从而实现对整个树形结构的遍历。
若是须要更换操做节点,例如只需对文件夹“文本文件”进行杀毒,客户端代码只需修改一行便可,将代码:
改成:
输出结果以下:
****对文件夹'文本文件'进行杀毒 ----对文本文件'九阴真经.txt'进行杀毒 ----对文本文件'葵花宝典.doc'进行杀毒 |
在具体实现时,咱们能够建立图形化界面让用户选择所需操做的根节点,无须修改源代码,符合“开闭原则”,客户端无须关心节点的层次结构,能够对所选节点进行统一处理,提升系统的灵活性。
【做者:刘伟 http://blog.csdn.net/lovelion】