1. 定义
创建了对象组的树形结构,将对象组合成树状结构以表示"整体-部分"的层次关系。
2. 代码
场景:大学下面有多个学院,学院下有多个部门,大学可以操作学院,学院可以操作部门。
@Data
abstract class Organization{
private String name;
public Organization(String name){
this.name = name;
}
protected void add(Organization organization){
throw new UnsupportedOperationException();
}
protected void remove(Organization organization){
throw new UnsupportedOperationException();
}
protected abstract void print();
}
class University extends Organization{
List<Organization> organizations = new ArrayList<>();
public University(String name) {
super(name);
}
@Override
protected void add(Organization organization) {
organizations.add(organization);
}
@Override
protected void remove(Organization organization) {
organizations.remove(organization);
}
@Override
protected void print() {
System.out.println("---------------" + getName() + "--------------");
for (Organization organization : organizations) {
organization.print();
}
}
}
class College extends Organization{
List<Organization> organizations = new ArrayList<>();
public College(String name) {
super(name);
}
@Override
protected void add(Organization organization) {
organizations.add(organization);
}
@Override
protected void remove(Organization organization) {
organizations.remove(organization);
}
@Override
protected void print() {
System.out.println("-------" + getName() + "------");
for (Organization organization : organizations) {
organization.print();
}
}
}
class Department extends Organization{
public Department(String name) {
super(name);
}
@Override
protected void print() {
System.out.println("--" + getName() + "--");
}
}
public class Client {
public static void main(String[] args) {
// 大学
Organization university = new University("清华大学");
// 学院
Organization computerCollege = new College("计算机学院");
Organization infoCollege = new College("信息工程学院");
// 将部门加入学院
computerCollege.add(new Department("人事部"));
computerCollege.add(new Department("后勤部"));
infoCollege.add(new Department("学工办"));
infoCollege.add(new Department("信息中心"));
// 将学院加入学校
university.add(computerCollege);
university.add(infoCollege);
// 输出
university.print();
}
}