定义
官方定义:组合模式也叫"整体-部分"模式,使用对象的树形结构来表示"整体-部分"的关系.
使用场景
只要是树结构都可以使用
类的视图
Node:节点抽象父类
Leaf:叶子节点
Branch:子节点
代码示例
定义一个节点抽象父类
abstract class Node{
abstract void outPut();
}
定义子节点
class BranchNode extends Node{
private String name;
private List<Node> nodes = new ArrayList<>();
public BranchNode(String name) {
this.name = name;
}
public List<Node> getNodes() {
return nodes;
}
@Override
void outPut() {
System.out.println(name);
}
BranchNode add(Node node){
nodes.add(node);
return this;
}
}
定义一个子节点
class Leaf extends Node{
private String name;
public Leaf(String name) {
this.name = name;
}
@Override
void outPut() {
System.out.println(name);
}
}
简单在控制台中打印出来
public class Main {
public static void main(String[] args) {
//树的根节点
BranchNode root = new BranchNode("root");
BranchNode childNode1 = new BranchNode("ChildNode1");
BranchNode childNode2 = new BranchNode("ChildNode2");
BranchNode secondaryChildNode = new BranchNode("SecondaryChildNode");
Leaf l1 = new Leaf("L1");
Leaf l2 = new Leaf("L2");
Leaf l3 = new Leaf("L3");
Leaf l4 = new Leaf("L4");
root.add(childNode1).add(childNode2);
childNode2.add(l3).add(secondaryChildNode);
childNode1.add(l1).add(l2);
secondaryChildNode.add(l4);
tree(root , 0);
}
static void tree(Node node , int depth){
for (int i = 0; i < depth ; i++){
System.out.print(" ");
}
node.outPut();
if (node instanceof BranchNode){
List<Node> nodes = ((BranchNode) node).getNodes();
for (Node n : nodes){
tree(n ,depth+1);
}
}
}
}
结果
注意
组合模式就是专门用来处理树形结构的数据或者带有层级关系结构的数据,可以非常方便的扩展层级结构以及灵活的组合层级结构.
组合模式的本质之一就是将[Tree] 转换成[List]或[Map],也可以理解为将层级结构数据转成平级结构数据进行处理
并不是所有的树形结构都适合使用组合模式.
结束
感谢大家的耐心阅读,如有建议请私信或评论留言。
如有收获,劳烦支持,关注、点赞、评论、收藏均可,博主会经常更新,与大家共同进步
如有不足之处请批评指正。