组合模式

组合模式

参考文件树:

处理树状结构的一个模式

个人理解为思维导图,有一些的像 例子:

Code:

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

public class TestComposite {
    public static void main(String[] args) {
        FolderNode root = new FolderNode("root node");

        root.add(new FileNode("java.txt"));
        root.add(new FileNode("spring.txt"));

        FolderNode linuxFolder = new FolderNode("linux folder!");

        root.add(linuxFolder);

        linuxFolder.add(new FileNode("cd"));
        linuxFolder.add(new FileNode("ls"));
        linuxFolder.add(new FileNode("touch"));
        //打印数
        tree(root,0);
    }

    static void tree(Node root,int depth){
        for (int i = 0; i < depth; i++) {
            System.out.print("-");
        }

        root.print();
        if (root instanceof FolderNode){
            for (Node node : ((FolderNode) root).nodeList) {
                tree(node,depth+1);
            }
        }
    }


}
//抽象节点
abstract class Node{
    abstract void print();
}

//文件节点
class FileNode extends Node{
    String fileName;

    public FileNode(String fileName) {
        this.fileName = fileName;
    }
    @Override
    public void print() {
        System.out.println(fileName);
    }
}
//文件夹节点
class FolderNode extends Node{

    List<Node> nodeList = new ArrayList<>();
    String folderName;

    public FolderNode(String folderName) {
        this.folderName = folderName;
    }

    @Override
    public void print() {
        System.out.println(folderName);
    }
    //添加到自己的子节点
    public void add(Node node){
        nodeList.add(node);
    }

}

图解:

posted @ 2021-02-06 20:54  immortal_mode  阅读(60)  评论(0)    收藏  举报