Composite 组合模式

Composite 组合模式

树状结构专用模式
节点接口node,其中叶子节点leafNode和分枝节点branchNode,分枝节点聚合node泛型的list.
Composite 组合模式 - 图1

  1. public class Composite {
  2. public static void main(String[] args) {
  3. BranchNode root = new BranchNode("Root");
  4. LeafNode leafNode1 = new LeafNode("leafNode1");
  5. BranchNode branchNode1 = new BranchNode("branchNode1");
  6. LeafNode leafNode2 = new LeafNode("leafNode2");
  7. LeafNode leafNode3 = new LeafNode("leafNode3");
  8. BranchNode branchNode2 = new BranchNode("branchNode2");
  9. LeafNode leafNode4 = new LeafNode("leafNode4");
  10. LeafNode leafNode5 = new LeafNode("leafNode5");
  11. root.add(leafNode1).add(branchNode1);
  12. branchNode1.add(leafNode2).add(leafNode3).add(branchNode2);
  13. branchNode2.add(leafNode4).add(leafNode5);
  14. tree(root,0);
  15. }
  16. public static void tree(Node node,int index){
  17. for (int i =0;i<index;i++){
  18. System.out.printf("--");
  19. }
  20. node.p();
  21. if(node instanceof BranchNode){
  22. for(Node node1: ((BranchNode) node).nodeArrayList){
  23. tree(node1,index+1);
  24. }
  25. }
  26. }
  27. }
  28. //节点接口类
  29. interface Node{
  30. void p();
  31. }
  32. //叶子节点类
  33. class LeafNode implements Node{
  34. String name;
  35. @Override
  36. public void p() {
  37. System.out.println(name);
  38. }
  39. public LeafNode(String name) {
  40. this.name = name;
  41. }
  42. }
  43. //分枝节点类
  44. class BranchNode implements Node{
  45. String name;
  46. ArrayList<Node> nodeArrayList = new ArrayList<>();
  47. public BranchNode(String name) {
  48. this.name = name;
  49. }
  50. @Override
  51. public void p() {
  52. System.out.println(name);
  53. }
  54. public BranchNode add(Node node){
  55. nodeArrayList.add(node);
  56. return this;
  57. }
  58. }