作者:Grey
原文地址:
組合模式是一種結構型模式。
組合模式中,最常用的一個用法就是目錄層級的遍歷,話不多說,直接上程式碼,主方法中
public class Main {
public static void main(String[] args) {
BranchNode root = new BranchNode("root");
BranchNode branch1 = new BranchNode("branch1");
BranchNode branch2 = new BranchNode("branch2");
branch1.addNode(new LeafNode("leaf1"));
root.addNode(branch1);
root.addNode(branch2);
tree(root, 0);
}
}
其中, BranchNode 為分支節點, LeafNode 是葉子節點 達到的效果就是列印如下的形式
root
--branch1
----leaf1
--branch2
遞迴方法
static void tree(Node node, int depth) {
for (int i = 0; i < depth; i++) {
System.out.print("--");
}
node.print();
if (node instanceof BranchNode) {
for (Node n : ((BranchNode) node).getNodes()) {
tree(n, depth + 1);
}
}
}
其中 BranchNode 和 LeafNode 都實現了 Node 介面,Node 介面(也可以為定義抽象類)僅提供了一個屬性( content 屬性,用於標識節點內容)和一個列印方法:
public abstract class Node {
protected String content;
protected abstract void print();
}
BranchNode 下可以包含多個 Node,因為一個分支下面可以有多個分支(這個分支可以是任意的 Node 子類)
public class BranchNode extends Node {
private List<Node> nodes = new ArrayList<>();
public BranchNode(String content) {
this.content = content;
}
@Override
public void print() {
System.out.println(content);
} // get..set方法略
}
組合模式的 UML 圖如下:
組合模式的應用
MyBatis解析各種 Mapping 檔案中的 SQL 語句時,設計了一個非常關鍵的類叫作 SqlNode,XML 中的每一個 Node 都會被解析為一個 SqlNode 物件,最後把所有 SqlNode 都拼裝到一起,就成為一條完整的 SQL 語句。
本文來自部落格園,作者:Grey Zeng,轉載請註明原文連結:https://www.cnblogs.com/greyzeng/p/16879520.html