用處:樹(shù)結(jié)構(gòu),...
先上類(lèi)圖

組合模式.jpg
案例代碼
先定義Node接口
package com.wwj.compositemode;
public interface Node {
abstract public void p();
}
定義葉子節(jié)點(diǎn)
package com.wwj.compositemode;
/***
* 葉子節(jié)點(diǎn),無(wú)下一層,包含具體的內(nèi)容
*/
public class LeafNode implements Node {
private String content;
public LeafNode(String content){
this.content=content;
}
@Override
public void p() {
System.out.println(content);
}
}
定義分支節(jié)點(diǎn)
package com.wwj.compositemode;
import java.util.ArrayList;
import java.util.List;
/**
* 分支節(jié)點(diǎn),包含多個(gè)Node(可能是葉子節(jié)點(diǎn)也可能是分支節(jié)點(diǎn))
*/
public class BranchNode implements Node {
private String name;
private List<Node> nodes = new ArrayList<>();
public BranchNode(String name){
this.name = name;
}
@Override
public void p() {
System.out.println(name);
}
public void addNodes(Node node){
this.nodes.add(node);
}
public List<Node> getNodes(){
return this.nodes;
}
public static void tree(Node node,int depth){
for (int i = 0; i <depth ; i++) {
System.out.print("--");
}
node.p();
if (node instanceof BranchNode){
BranchNode branchNode = (BranchNode)node;
for(Node n:branchNode.getNodes()){
tree(n,depth+1);
}
}
}
}
具體應(yīng)用
package com.wwj.compositemode;
public class main {
public static void main(String[] args) {
//最頂級(jí)菜單
BranchNode root = new BranchNode("root");
//第二級(jí)菜單
BranchNode menuOne = new BranchNode("menuOne");
BranchNode menuTwo = new BranchNode("menuTwo");
BranchNode menuThree = new BranchNode("menuThree");
//第三集菜單(最后一級(jí)菜單)
LeafNode ln1 = new LeafNode("ln1");
LeafNode ln2 = new LeafNode("ln2");
LeafNode ln3 = new LeafNode("ln3");
LeafNode ln4 = new LeafNode("ln4");
//添加一級(jí)菜單
root.addNodes(menuOne);
root.addNodes(menuTwo);
root.addNodes(menuThree);
//添加二級(jí)菜單
menuOne.addNodes(ln1);
menuOne.addNodes(ln2);
menuTwo.addNodes(ln3);
menuTwo.addNodes(ln4);
//打印所有節(jié)點(diǎn)
BranchNode.tree(root,0);
}
}