- 定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
- 代码:
public abstract class Node {
private String nodeName;
private String nodeId;
public Node(String nodeName,String nodeId) {
this.nodeId = nodeId;
this.nodeName = nodeName;
}
public String getNodeInfo(){
String nodeInfo = "节点名称:"+nodeName+" 节点Id:"+nodeId;
return nodeInfo;
}
}
public class BranchNode extends Node{
private List<Node> subNodeList = new ArrayList<Node>();
public BranchNode(String branchNodeName,String branchNodeId) {
super(branchNodeName,branchNodeId);
}
public void addSubNode(Node subNode){
subNodeList.add(subNode);
}
public List<Node> getSubNodeList(){
return subNodeList;
}
}
public class LeafNode extends Node{
public LeafNode(String leafNodeName,String leafNodeId) {
super(leafNodeName,leafNodeId);
}
}
public class Client {
public static void main(String[] args){
BranchNode root = buildTree();
System.out.println(getTreeInfo(root));
}
public static BranchNode buildTree(){
//将根节点对象生产出来---------------------------------------------
BranchNode root = new BranchNode("机构人员树","-1");
//将一级机构生产出来----------------------------------------------
BranchNode firstOrg1 = new BranchNode("北京市","1");
//将二级机构生产出来-----------------------------------------------
BranchNode secondOrg1 = new BranchNode("海淀区","101");
BranchNode secondOrg2 = new BranchNode("大兴区","102");
BranchNode secondOrg3 = new BranchNode("丰台区","103");
//将三级人员生产出来------------------------------------------------
LeafNode person1 = new LeafNode("北京海淀人1","10101");
LeafNode person2 = new LeafNode("北京海淀人2","10102");
LeafNode person3 = new LeafNode("北京大兴人1","10201");
LeafNode person4 = new LeafNode("北京丰台人1","10301");
//组装---------------------------------------------------------
secondOrg1.addSubNode(person1);
secondOrg1.addSubNode(person2);
secondOrg2.addSubNode(person3);
secondOrg3.addSubNode(person4);
firstOrg1.addSubNode(secondOrg1);
firstOrg1.addSubNode(secondOrg2);
firstOrg1.addSubNode(secondOrg3);
root.addSubNode(firstOrg1);
return root;
}
public static String getTreeInfo(BranchNode branchNode){
String result = branchNode.getNodeInfo()+"\n";
List<Node> subList = branchNode.getSubNodeList();
for(int i=0;i<subList.size();i++){
Node node = subList.get(i);
result += node.getNodeInfo()+"\n";
if(node instanceof BranchNode){
result += getTreeInfo((BranchNode)node)+"\n";
}
}
return result;
}
}