package Composite;

import java.util.ArrayList;
import java.util.List;

public interface AbstractFile {
    void Killvirus();
}

class ImageFile implements AbstractFile {
    private String name;

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

    public void Killvirus() {
        System.out.println("图像文件" + name + "进行查杀");
    }
}

class TextFile implements AbstractFile {
    private String name;

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

    public void Killvirus() {
        System.out.println("文本文件" + name + "进行查杀");
    }
}

class VideoFile implements AbstractFile {
    private String name;

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

    public void Killvirus() {
        System.out.println("视频文件" + name + "进行查杀");
    }
}


class Folder implements AbstractFile {
    private String name;
    //定义容器,存储本容器下的子节点
    private List<AbstractFile> list = new ArrayList<AbstractFile>();

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

    public void add(AbstractFile f) {
        list.add(f);
        System.out.println("添加文件"+f);
    }

    public void remove(AbstractFile f) {
        list.remove(f);

        System.out.println("删除文件"+f);
    }

    public AbstractFile getChild(int index) {
        return list.get(index);
    }

    public void Killvirus() {
        System.out.println("文件夹"+name+"进行查杀");
        for(AbstractFile file :list){
            file.Killvirus();
        }
    }
}
package Composite;

public class Client {
    public static void main(String[] args) {
        AbstractFile f1, f2, f3, f4, f5;
        f1 = new Folder("我的收藏");
        f2 = new ImageFile("头像");
        f3 = new TextFile("小说");

        ((Folder) f1).add(f2);
        ((Folder) f1).add(f3);
        f2.Killvirus();
    }
}

运行结果: