编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图:
其实但凡有点开发经验的来说 都应该设计为树结构
说明
编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。
package com.flower.zuhe;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
public class TestMain {
public static void main(String[] args) {
OrganizationComponent university = new University("清华大学", "中国顶级大学");
OrganizationComponent college1 = new College("计算机学院", "计算机的天堂");
OrganizationComponent college2 = new College("信息工程学院", "信息工程的天堂");
university.addOrganizationComponent(college1);
university.addOrganizationComponent(college2);
college1.addOrganizationComponent(new Department("计算机科学与技术","计算机科学与技术"));
college1.addOrganizationComponent(new Department("软件工程","软件工程"));
college1.addOrganizationComponent(new Department("网络工程","网络工程"));
college2.addOrganizationComponent(new Department("通信工程","通信工程"));
college2.addOrganizationComponent(new Department("信息工程","信息工程"));
university.print();
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
abstract class OrganizationComponent{
private String name;
private String des;
protected void addOrganizationComponent(OrganizationComponent organizationComponent){
// 默认实现 叶子节点不需要重写
throw new UnsupportedOperationException();
}
protected void removeOrganizationComponent(OrganizationComponent organizationComponent){
// 默认实现 叶子节点不需要重写
throw new UnsupportedOperationException();
}
// 叶子节点也需要打印方法
protected abstract void print();
}
/**
* 学校
*/
class University extends OrganizationComponent{
public University(String name, String des) {
super(name, des);
}
private final List<OrganizationComponent> organizationComponents = new ArrayList<>();
@Override
protected void print() {
System.out.println("--------------"+getName()+"----------------");
organizationComponents.forEach(OrganizationComponent::print);
}
@Override
protected void addOrganizationComponent(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void removeOrganizationComponent(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
}
/**
* 学院
*/
class College extends OrganizationComponent{
public College(String name, String des) {
super(name, des);
}
private final List<OrganizationComponent> organizationComponents = new ArrayList<>();
@Override
protected void print() {
System.out.println("--------------"+getName()+"----------------");
organizationComponents.forEach(OrganizationComponent::print);
}
@Override
protected void addOrganizationComponent(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void removeOrganizationComponent(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
}
/**
* 院系
*/
class Department extends OrganizationComponent{
public Department(String name, String des) {
super(name, des);
}
@Override
protected void print() {
System.out.println("--------------"+getName()+"----------------");
}
}
Java的集合类-HashMap就使用了组合模式