设计模式之组合模式

定义

官方定义:组合模式也叫"整体-部分"模式,使用对象的树形结构来表示"整体-部分"的关系.

使用场景

只要是树结构都可以使用

类的视图

请添加图片描述
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],也可以理解为将层级结构数据转成平级结构数据进行处理
并不是所有的树形结构都适合使用组合模式.

结束

感谢大家的耐心阅读,如有建议请私信或评论留言。
如有收获,劳烦支持,关注、点赞、评论、收藏均可,博主会经常更新,与大家共同进步
如有不足之处请批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值