概念
组合模式属于一种树状结构,通过部分-整体的层次结构来表示,组合模式使得用户对单个对象和组合对象的使用具有一致性
实现
这是一个软件研发企业技术部组织结构,是一个典型的树状结构
实现此结构:
实现代码:
定义一个节点的抽象类:
public abstract class Node {
abstract public void print();
}
定义一个分支节点:
/**
* 定义分支节点
*/
public class BranchNode extends Node {
//定义分支
List<Node> list = new ArrayList<>();
//定义名称
String dpName;
//定义构造方法
public BranchNode(String dpName) {
this.dpName = dpName;
}
@Override
public void print() {
System.out.println(dpName);
}
//定义分子添加方法
public void add(Node node){
list.add(node);
}
}
定义一个叶子节点类:
/**
* 定义叶子节点
*/
public class LeafNode extends Node {
//定义每个部门的名称
String dpName;
//定义构造方法
public LeafNode(String dpName) {
this.dpName = dpName;
}
@Override
public void print() {
System.out.println(dpName);
}
}
主类输入数据进行测试:
public class Main {
public static void main(String[] args) {
//实例总监分支
BranchNode majordomo = new BranchNode("产品技术中心总监");
//实例研发部
BranchNode invention = new BranchNode("产品研发部经理");
//实例测试部
BranchNode test = new BranchNode("系统测试部经理");
//实例管理部
BranchNode manage = new BranchNode("系统支持与管理部经理");
//实例主管
Node leader = new LeafNode("研发调研主管");
//实例研发工程师
Node rde = new LeafNode("研发工程师");
//实例系统测试师
Node st = new LeafNode("系统测试师");
//实例系统维护工程师
Node sme = new LeafNode("系统维护工程师");
//实例用户培训工程师
Node ute = new LeafNode("用户培训工程师");
majordomo.add(invention);
majordomo.add(test);
majordomo.add(manage);
invention.add(leader);
invention.add(rde);
test.add(st);
manage.add(sme);
manage.add(ute);
//通过递归方式进行遍历
tree(majordomo,0);
}
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 node1 : ((BranchNode)node).list){
tree(node1,depth + 1);
}
}
}
}
实验结果:
本文的代码:https://pan.baidu.com/s/1X5WusiDe9-JSd-rdWPxfJQ
提取码:uhux