目录
一:定义
适合树状带有包含信息的数据
例如:大学包含院系,院系包含学科
二:案例
// University就是Composite,可以管理College @Data public class University extends OrganizationComponent { List<OrganizationComponent> organizationComponentList = new ArrayList<>(); // 构造器 public University(String name, String desc) { super(name, desc); } // 重写add方法 @Override public void add(OrganizationComponent organizationComponent) { organizationComponentList.add(organizationComponent); } // 重写remove方法 @Override public void remove(OrganizationComponent organizationComponent) { organizationComponentList.remove(organizationComponent); } // print方法,就是输出University 包含的学院 @Override public void print() { System.out.println("==========" + super.getName() + "=========="); // 遍历organizationComponentList for (OrganizationComponent organizationComponent : organizationComponentList) { organizationComponent.print(); } } }
public class College extends OrganizationComponent{ // List中存放的是Department List<OrganizationComponent> organizationComponentList = new ArrayList<>(); // 构造器 public College(String name, String desc) { super(name, desc); } // 重写add方法 @Override public void add(OrganizationComponent organizationComponent) { // 将来实际业务中, College的add和University的add 不一定完全一样 organizationComponentList.add(organizationComponent); } // 重写remove方法 @Override public void remove(OrganizationComponent organizationComponent) { organizationComponentList.remove(organizationComponent); } // print方法,就是输出University 包含的学院 @Override public void print() { System.out.println("==========" + super.getName() + "=========="); // 遍历organizationComponentList for (OrganizationComponent organizationComponent : organizationComponentList) { organizationComponent.print(); } } }
public class Department extends OrganizationComponent { public Department(String name, String desc) { super(name, desc); } // add和remove方法就不用写了,因为他是叶子节点 @Override public void print() { System.out.println(getName()); } }
@Data @AllArgsConstructor @NoArgsConstructor public abstract class OrganizationComponent { private String name;// 名字 private String des;// 描述 protected void add(OrganizationComponent organizationComponent) { // 默认实现 throw new UnsupportedOperationException(); } protected void remove(OrganizationComponent organizationComponent) { // 默认实现 throw new UnsupportedOperationException(); } // 打印方法 public abstract void print(); }
public class Client { public static void main(String[] args) { // 从大到小创建对象 OrganizationComponent university = new University("清华大学", "顶级大学"); // 创建学院 OrganizationComponent computerCollege = new College("计算机学院", "计算机学院"); OrganizationComponent infoEngineerCollege = new College("信息工程学院", "信息工程学院"); // 创建各个学院下面的系 computerCollege.add(new Department("软件工程", "软件工程")); computerCollege.add(new Department("网络工程", "网络工程")); infoEngineerCollege.add(new Department("通信工程", "通信工程")); infoEngineerCollege.add(new Department("信息工程", "信息工程")); // 将两个学院加入到学校 university.add(computerCollege); university.add(infoEngineerCollege); university.print(); } }