一. 前言:
小熙最近看了下组合模式,记录下。在23种设计模式中偏向于结构类型,有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
二. 过程:
-
图解
-
组合模式
/** * 组合模式 * 适用于遍历树状结构,组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码; * 但是设计较复杂,客户端需要花更多时间理清类之间的层次关系,不容易限制容器中的构件,不容易用继承的方法来增加构件的新功能; * * @author chengxi * @date 2020/8/25 15:46 */ abstract class Node{ /** * 打印名称 * @return */ public abstract void printName(); } class BranchNode extends Node { List<Node> nodeList = new ArrayList<>(); String name; public BranchNode(String name) { this.name = name; } @Override public void printName() { System.out.println(name); } public void addNode(Node node){ nodeList.add(node); } } class LeafNode extends Node { String name; public LeafNode(String name) { this.name = name; } @Override public void printName() { System.out.println(name); } } class TestMain { public static void main(String[] args) { BranchNode branchNodeRoot = new BranchNode("主节点"); BranchNode branchNodeOne = new BranchNode("第一个分支"); BranchNode branchNodeTWO = new BranchNode("第二个分支"); BranchNode branchNodeFour = new BranchNode("第三个分支"); LeafNode leafNodeOne = new LeafNode("第一片叶子"); LeafNode leafNodeTwo = new LeafNode("第二片叶子"); LeafNode leafNodeThree = new LeafNode("第三片叶子"); LeafNode leafNodeFour = new LeafNode("第四片叶子"); branchNodeRoot.addNode(branchNodeOne); branchNodeRoot.addNode(branchNodeTWO); branchNodeTWO.addNode(branchNodeFour); branchNodeOne.addNode(leafNodeOne); branchNodeOne.addNode(leafNodeTwo); branchNodeFour.addNode(leafNodeThree); branchNodeFour.addNode(leafNodeFour); // 打印树状结构图 printTree(branchNodeRoot, 0); } public static void printTree(Node node, int depth){ for (int i = 0; i < depth; i++) { System.out.print("--"); } node.printName(); if (node instanceof BranchNode) { for (Node node1 : ((BranchNode) node).nodeList) { printTree(node1, depth + 1); } } } }
三. 后语:
组合模式常用于和树状结构有关的场景中,其他场景使用的还是比较少的。