小白谈谈组合模式

概念

组合模式属于一种树状结构,通过部分-整体的层次结构来表示,组合模式使得用户对单个对象和组合对象的使用具有一致性

实现

这是一个软件研发企业技术部组织结构,是一个典型的树状结构
实现此结构:
在这里插入图片描述

实现代码:
定义一个节点的抽象类:

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

发布了48 篇原创文章 · 获赞 0 · 访问量 662

猜你喜欢

转载自blog.csdn.net/weixin_44943485/article/details/105225807
今日推荐