脚本宝典收集整理的这篇文章主要介绍了组合模式和访问者模式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,请注明来意。