组合模式和访问者模式demo,访问和处理树状结构数据

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了组合模式和访问者模式demo,访问和处理树状结构数据脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

组合模式,访问者模式 的实际运用,

DeptNode 是部门结点,如Test类,组成了一个部门的结点。注意一点是:在DeptNode 中新增了 accept的方法 来接收DeptNodeVisitor的访问。

创建一个DeptNodeVisitor 部门树访问者接口,定义方法visitor。

我们demo是遍历树,所以 DeptNodePrintVisitor 实现这个方法,打印部门的数据。运用到了递归。

 

/**
 * 部门树结点
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class DeptNode {
    private String name;
    private String no;
    private List<DeptNode> children;

    public void accept(DeptNodeVisitor visitor){
        visitor.visitor(this);
    }
}
/**
 * 部门树节点的访问接口
 */
public interface DeptNodeVisitor {

    /**
     * 访问部门树结点
     * @param node 部门结点
     */
    void visitor(DeptNode node);

}
/**
 * 部门树节点的 树遍历打印 访问者
 */
public class DeptNodePrintVisitor implements DeptNodeVisitor{

    @Override
    public void visitor(DeptNode node) {
        List<DeptNode> childrenList = node.getChildren();
        if(childrenList != null && childrenList.size() > 0) {
            childrenList.forEach(i -> {
                i.accept(this);
            });
        }
        System.out.println(node.getNo() + ":" + node.getName());
    }
}
public class DeptNodeRemoveVisitor implements DeptNodeVisitor{

    @Override
    public void visitor(DeptNode node) {
        List<DeptNode> childrenList = node.getChildren();
        if(childrenList != null && childrenList.size() > 0) {
            childrenList.forEach(i -> {
                i.accept(this);
            });
        }
        // 这里做删除逻辑,可以传dao组件过来
        System.out.println(node.getNo() + ":" + node.getName() + "删除");
        node.setChildren(null);
        node.setName(null);
        node.setNo(null);
     
    }
}
public class Test {
    public static void main(String[] args) {
        DeptNode node1 = new DeptNode("技术01部门", "001", null);
        DeptNode node2 = new DeptNode("技术02部门", "002", null);
        DeptNode node3 = new DeptNode("技术03部门", "003", null);
        List<DeptNode> list = new ArrayList<>();
        list.add(node1);
        list.add(node2);
        list.add(node3);
        DeptNode node001 = new DeptNode("技术总部门", "1001", list);

        DeptNode node4 = new DeptNode("UI1部门", "004", null);
        DeptNode node5 = new DeptNode("UI2部门", "005", null);
        List<DeptNode> list2 = new ArrayList<>();
        list2.add(node4);
        list2.add(node5);
        DeptNode node002 = new DeptNode("UI总部门", "1002", list2);


        List<DeptNode> list3 = new ArrayList<>();
        list3.add(node001);
        list3.add(node002);
        DeptNode node6 = new DeptNode("深圳分部", "100", list3);


        DeptNodePrintVisitor visitor = new DeptNodePrintVisitor();
        visitor.visitor(node6);

        System.out.println("----------------------------------------------------------------");
        DeptNodeRemoveVisitor removeVisitor = new DeptNodeRemoveVisitor();
        removeVisitor.visitor(node001);

        System.out.println("----------------------------------------------------------------");
        visitor.visitor(node6);

    }
}

 

脚本宝典总结

以上是脚本宝典为你收集整理的组合模式和访问者模式demo,访问和处理树状结构数据全部内容,希望文章能够帮你解决组合模式和访问者模式demo,访问和处理树状结构数据所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: