编写程序,展示学校院系结构,要求在一个页面中展示出学院的院系组成,一个学院有几个学院,一个学院有几个系。如下图
系 extends 学院 extends 学校
public class OrganizationComponent {
private String name;//组织名称
private String des;//组织描述
public OrganizationComponent(String name,String des){
this.name = name;
this.des = des;
}
//方法,进行默认空实现,因为叶子节点不需要实现这些方法
//如果做成抽象类,则叶子节点需要做无用的空实现
public void add(OrganizationComponent o){}
public void remove(OrganizationComponent o){}
public void print(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
}
public class University extends OrganizationComponent {
//组合 包含下一个节点的集合 (学院集合)
public List ocs = new ArrayList();
public University(String name, String des) {
super(name, des);
}
@Override
public void add(OrganizationComponent o) {
ocs.add(o);
}
@Override
public void remove(OrganizationComponent o) {
ocs.remove(o);
}
@Override
public void print() {
System.out.println("------" + getName() + "------");
for (OrganizationComponent o : ocs) {
o.print();
}
}
}
public class College extends OrganizationComponent{
//组合 包含下一个节点的集合 (专业集合)
public List ocs = new ArrayList();
public College(String name, String des) {
super(name, des);
}
@Override
public void add(OrganizationComponent o) {
ocs.add(o);
}
@Override
public void remove(OrganizationComponent o) {
ocs.remove(o);
}
@Override
public void print() {
System.out.println("------" + getName() + "------");
for (OrganizationComponent o : ocs) {
o.print();
}
}
}
public class Department extends OrganizationComponent{
public Department(String name, String des) {
super(name, des);
}
@Override
public void print() {
System.out.println(this.getName());
}
}
//测试
public class Client {
public static void main(String[] args) {
OrganizationComponent university = new University("清华大学", "test");
OrganizationComponent infoProjectCollege = new College("信息工程学院", "test");
OrganizationComponent softwareCollege = new College("软件学院", "test");
infoProjectCollege.add(new Department("物联网工程","test"));
infoProjectCollege.add(new Department("通信工程","test"));
infoProjectCollege.add(new Department("电子信息","test"));
softwareCollege.add(new Department("软件工程","test"));
softwareCollege.add(new Department("计算机科学与技术","test"));
softwareCollege.add(new Department("大数据科学与技术","test"));
university.add(infoProjectCollege);
university.add(softwareCollege);
university.print();
}
}
HashMap中使用了组合模式
//说明
//1.Map就是一个抽象的构建(类似我们的Component)
//2. HashMap是一个中间的构建(Composite),实现/继承了相关方法put,putAll
//3. Node是 HashMap的静态内部类,类似Leaf叶子节点,这里就没有put,putAll
// static class Node implements Map.Entry
只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。
参与评论
手机查看
返回顶部