组合模式

50 阅读1分钟

组合模式(Composite)通常用于构建树形结构。

下面以文件系统简单说明组合模式。

/**
 * 抽象节点类
 */
public abstract class Node {

    private String name;

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


    protected abstract void addChild(Node child);

    protected  void display(int space) {

        for (int i = 0; i < space; i++) {
            System.out.print(" ");
        }
        System.out.println(name);

    }
}
/**
 * 文件类
 */
public class File extends Node {

    public File(String name) {
        super(name);
    }

    @Override
    protected void addChild(Node child) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void display(int space) {
        super.display(space);
    }
}
/**
 * 文件夹类
 */
public class Folder extends Node {


    private List<Node> children = new ArrayList<Node>();

    public Folder(String name) {
        super(name);
    }

    @Override
    protected void addChild(Node child) {
        children.add(child);
    }

    protected void display(int space) {

        super.display(space);
        space++;
        for (Node child : children) {
            child.display(space);
        }

    }
}
public class Test {
    public static void main(String[] args) {
        Node driveD=new Folder("D:");
        Node doc=new Folder("我的文件");
        doc.addChild(new File("红楼梦.pdf"));
        doc.addChild(new File("西游记.pdf"));
        Node sc=new Folder("私密文件");
        sc.addChild(new File("我的女房东.avi"));
        doc.addChild(sc);
        driveD.addChild(doc);

        Node downLoad=new Folder("下载");
        downLoad.addChild(new File("三国演绎.pdf"));
        driveD.addChild(downLoad);
        driveD.display(0);
    }
}

image.png