场景:
(1)父部门->子部门->子部门
(2)咱们要对部门树,删除一个父部门以及其下全部的子部门设计模式
部门树形结构,咱们能够用一个对象来表示,里面报表集合属性。this
public class NonPattern2 { public static void main(String[] args) { //1.根节点 Department rootDepartment = new Department("根部门"); //2.子节点 Department subDepartment1 = new Department("子部门1"); Department subDepartment2 = new Department("子部门2"); //3.孙子节点 Department leafDepartment1 = new Department("叶子部门1"); Department leafDepartment2 = new Department("叶子部门2"); Department leafDepartment3 = new Department("叶子部门3"); //4.组装数据 rootDepartment.getChidlren().add(subDepartment1); rootDepartment.getChidlren().add(subDepartment2); subDepartment1.getChidlren().add(leafDepartment1); subDepartment1.getChidlren().add(leafDepartment2); subDepartment2.getChidlren().add(leafDepartment3); //5.删除数据 for (Department subDept:rootDepartment.getChidlren()){ if(subDept.getChidlren().size()>0){ for (Department leafDept:subDept.getChidlren()){ leafDept.remove(); } } subDept.remove(); } rootDepartment.remove(); /** * 输出: * 删除部门【叶子部门1】 * 删除部门【叶子部门2】 * 删除部门【子部门1】 * 删除部门【叶子部门3】 * 删除部门【子部门2】 * 删除部门【根部门】 */ } public static class Department{ private String name; private List<Department> chidlren = new ArrayList(); public Department(String name){ this.name = name; } public void remove(){ System.out.println("删除部门【" + name + "】"); } public void setChidlren(List<Department> chidlren) { this.chidlren = chidlren; } public List<Department> getChidlren() { return chidlren; } public String getName() { return name; } public void setName(String name) { this.name = name; } } }
public class CompositePattern2 { public static void main(String[] args) { //1.父部门 Department parentDept = new Department("父部门"); //2.子部门 Department subDept1 = new Department("子部门1"); Department subDept2 = new Department("子部门2"); //3.叶子部门 Department leafDept1 = new Department("叶子部门1"); Department leafDept2 = new Department("叶子部门2"); Department leafDept3 = new Department("叶子部门3"); //4.组装数据 subDept1.getChildren().add(leafDept1); subDept1.getChildren().add(leafDept2); subDept2.getChildren().add(leafDept3); parentDept.getChildren().add(subDept1); parentDept.getChildren().add(subDept2); //5.删除 parentDept.remove(); } public static class Department{ private String name; private List<Department> children = new ArrayList<Department>(); public Department(String name){ super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Department> getChildren() { return children; } public void setChildren(List<Department> children) { this.children = children; } //===================关键点================= public void remove(){ //递归删除:递归找准结束边界:对象的属性集合不大于0就结束 if(children.size()>0){ for (Department child:children){ child.remove();//递归调用 } } System.out.println("删除部门【" + name + "】"); } } }