Composite 组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件;再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子。
这里以构造一棵树并遍历枝干,叶子为例,编写代码如下:
抽象节点:
public abstract class Node { abstract void show(); }
叶子节点:
public class LeafNode extends Node{ private String name; public LeafNode(String name) { this.name = name; } @Override void show() { System.out.println(name); } }
枝干,包含叶子节点:
public class BranchNode extends Node{ private String name; public List<Node> nodes = new ArrayList<>(); public BranchNode(String name) { this.name = name; } @Override void show() { System.out.println(name); } public void add(Node node) { nodes.add(node); } }
测试代码:
public class Test { public static void main(String[] args) { BranchNode root = new BranchNode("root"); BranchNode branchA = new BranchNode("branchA"); root.add(branchA); branchA.add(new LeafNode("leafa")); branchA.add(new LeafNode("leafb")); branchA.add(new LeafNode("leafc")); display(root, 0); } /** 递归显示 */ public static void display(Node node, int level) { for (int i=0;i<level;i++) { System.out.print("-"); } node.show(); if (node instanceof BranchNode) { for (Node n : ((BranchNode) node).nodes) { display(n, level+1); } } } }
打印效果如下:
root
-branchA
--leafa
--leafb
--leafc