定義
將對(duì)象以樹形結(jié)構(gòu)組織起來,以達(dá)成“部分-整體” 的層次結(jié)構(gòu)彻采,使得客戶端對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性.
組合模式有時(shí)又叫部分-整體模式在處理類似樹形結(jié)構(gòu)的問題時(shí)比較方便。
關(guān)系圖
image.png
使用場(chǎng)景
當(dāng)發(fā)現(xiàn)需求中是體現(xiàn)部分與整體層次的結(jié)構(gòu)時(shí)逊脯,以及希望用戶可以忽略組合對(duì)象與單個(gè)對(duì)象的不同,統(tǒng)一的使用組合結(jié)構(gòu)中的所有對(duì)象時(shí)约谈,就應(yīng)該考慮用組合模式了城须。
將多個(gè)對(duì)象組合在一起進(jìn)行操作,常用于表示樹形結(jié)構(gòu)中队魏,例如二叉樹等。
代碼示例
public class TreeNode {
private String name;
private TreeNode parent;
private Vector<TreeNode> children = new Vector<TreeNode>();
public TreeNode(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TreeNode getParent() {
return parent;
}
public void setParent(TreeNode parent) {
this.parent = parent;
}
//添加孩子節(jié)點(diǎn)
public void add(TreeNode node){
children.add(node);
}
//刪除孩子節(jié)點(diǎn)
public void remove(TreeNode node){
children.remove(node);
}
//取得孩子節(jié)點(diǎn)
public Enumeration<TreeNode> getChildren(){
return children.elements();
}
}
public class Tree {
TreeNode root = null;
public Tree(String name) {
root = new TreeNode(name);
}
public static void main(String[] args) {
Tree tree = new Tree("A");
TreeNode nodeB = new TreeNode("B");
TreeNode nodeC = new TreeNode("C");
nodeB.add(nodeC);
tree.root.add(nodeB);
System.out.println("build the tree finished!");
}
}
個(gè)人介紹:
** 高廣超** :多年一線互聯(lián)網(wǎng)研發(fā)與架構(gòu)設(shè)計(jì)經(jīng)驗(yàn)万搔,擅長(zhǎng)設(shè)計(jì)與落地高可用胡桨、高性能互聯(lián)網(wǎng)架構(gòu)。目前就職于美團(tuán)網(wǎng)瞬雹,負(fù)責(zé)核心業(yè)務(wù)研發(fā)工作昧谊。