場景:
(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 + "】"); } } }