杀毒软件(设计模式--组合模式)

    实例要求:使用组合模式设计一个杀毒软件框架,该软件既可以对某个文件夹杀毒,也可以对某个指定的文件杀毒,文件种类包括文本文件、图片文件、视频文件。

    实现截图:

                   

 

    先上UML图:

                                     

    ImageFile.java (VideoFile合并到ImageFile.java中了,有需要的话可以自行拆开)

class ImageFile {
    private String name;

    public ImageFile(String name) {
        this.name = name;
    }

    public void killVirus() {
        //模拟杀毒
        System.out.println("----对图像文件'" + name + "'进行杀毒");
    }
}

    TextFile.java

//文本文件类
class TextFile {
    private String name;

    public TextFile(String name) {
        this.name = name;
    }

    public void killVirus() {
        //模拟杀毒
        System.out.println("----对文本文件'" + name + "'进行杀毒");
    }
}

    Folder.java

//文件夹类
class Folder {
    private String name;
    //定义集合folderList,用于存储Folder类型的成员
    private ArrayList<Folder> folderList = new ArrayList<Folder>();
    //定义集合imageList,用于存储ImageFile类型的成员
    private ArrayList<ImageFile> imageList = new ArrayList<ImageFile>();
    //定义集合textList,用于存储TextFile类型的成员
    private ArrayList<TextFile> textList = new ArrayList<TextFile>();
    //定义集合movieList,用于存储MovieFile类型的成员
    private ArrayList<MovieFile> movieList = new ArrayList<MovieFile>();

    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);
    }

    //增加新的MovieFile类型的成员
    public void addMovieFile(MovieFile movie) {
        movieList.add(movie);
    }

    //需提供四个不同的方法removeFolder()、removeImageFile()和removeTextFile()和removeMovieFile()来删除成员,代码省略

    //需提供四个不同的方法getChildFolder(int i)、getChildImageFile(int i)和getChildTextFile(int i)和getChildMovieFile(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();
        }

        //如果是MovieFile类型的成员,调用MovieFile的killVirus()方法
        for(Object obj : movieList) {
            ((MovieFile)obj).killVirus();
        }
    }
}

    test.java

public class shijian2_zuhemoshi {
    public static void main(String args[]) {
        Folder folder1, folder2, folder3, folder4;
        folder1 = new Folder("txt文档包");
        folder2 = new Folder("img文件包");
        folder3 = new Folder("文本文件");
        folder4 = new Folder("视频文件包");

        ImageFile image1,image2;
        image1 = new ImageFile("s1.jpg");
        image2 = new ImageFile("影流之主.gif");

        TextFile text1,text2;
        text1 = new TextFile("今天要写小说么.txt");
        text2 = new TextFile("设计模式报告.doc");

        MovieFile movie1,movie2;
        movie1 = new MovieFile("Phoenix.mov");
        movie2 = new MovieFile("KDA.mp4");

        folder2.addImageFile(image1);
        folder2.addImageFile(image2);
        folder3.addTextFile(text1);
        folder3.addTextFile(text2);
        folder4.addMovieFile(movie1);
        folder4.addMovieFile(movie2);

        folder1.addFolder(folder2);
        folder1.addFolder(folder3);
        folder1.addFolder(folder4);

        folder1.killVirus();
    }
}

 

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值