树形结构的处理——组合模式(三)

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

    图11-5 杀毒软件框架设计结构图

    编写如下客户端测试代码:

    1. public static void main(String args[]) {
    2. //针对抽象构件编程
    3. AbstractFile file1,file2,file3,file4,file5,folder1,folder2,folder3,folder4;
    4. folder1 = new Folder("Sunny的资料");
    5. folder2 = new Folder("图像文件");
    6. folder3 = new Folder("文本文件");
    7. folder4 = new Folder("视频文件");
    8. file3 = new TextFile("九阴真经.txt");
    9. file4 = new TextFile("葵花宝典.doc");
    10. file5 = new VideoFile("笑傲江湖.rmvb");
    11. folder2.add(file1);
    12. folder2.add(file2);
    13. folder3.add(file3);
    14. folder3.add(file4);
    15. folder4.add(file5);
    16. folder1.add(folder4);
    17. //从“Sunny的资料”节点开始进行杀毒操作
    18. folder1.killVirus();
    19. }
    20. }

    编译并运行程序,输出结果如下:

    由于在本实例中使用了组合模式,在抽象构件类中声明了所有方法,包括用于管理和访问子构件的方法,如add()方法和remove()方法等,因此在ImageFile等叶子构件类中实现这些方法时必须进行相应的异常处理或错误提示。在容器构件类Folder的killVirus()方法中将递归调用其成员对象的killVirus()方法,从而实现对整个树形结构的遍历。

    代码:

    1. folder1.killVirus();

    改为:

    输出结果如下:

    1. ****对文件夹'文本文件'进行杀毒
    2. ----对文本文件'九阴真经.txt'进行杀毒