组合模式
组合的抽象类
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 OrganizationComponent(String name, String des) {
this.name = name;
this.des = des;
}
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;
}
protected abstract void print();
}
大学的实现类
class University extends OrganizationComponent{
public University(String name, String des) {
super(name, des);
}
List<OrganizationComponent> lists = new ArrayList<>();
@Override
protected void add(OrganizationComponent organizationComponent) {
lists.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
lists.remove(organizationComponent);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDes() {
return super.getDes();
}
@Override
protected void print() {
System.out.println("-----"+getName()+"-----");
for (OrganizationComponent list : lists) {
list.print();
}
}
}
院系的实现类
class College extends OrganizationComponent{
public College(String name, String des) {
super(name, des);
}
List<OrganizationComponent> lists = new ArrayList<>();
@Override
protected void add(OrganizationComponent organizationComponent) {
lists.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
lists.remove(organizationComponent);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDes() {
return super.getDes();
}
@Override
protected void print() {
System.out.println("-----"+getName()+"-----");
for (OrganizationComponent list : lists) {
list.print();
}
}
}
专业的实现类
class Department extends OrganizationComponent{
public Department(String name, String des) {
super(name, des);
}
@Override
public String getName() {
return super.getName();
}
@Override
public String getDes() {
return super.getDes();
}
@Override
protected void print() {
System.out.println(getName());
}
}
测试类
public class CompositeTest {
public static void main(String[] args) {
OrganizationComponent university = new University("山东123大学", "山东的");
OrganizationComponent college1 = new College("理学院", "数学类");
OrganizationComponent college2 = new College("法学院", "文学类");
college1.add(new Department("信息安全","计算机类"));
college1.add(new Department("大数据","计算机类"));
college1.add(new Department("计算机科学与技术","计算机类"));
college2.add(new Department("宪法","法律"));
college2.add(new Department("民法","法律"));
college2.add(new Department("刑法","法律"));
university.add(college1);
university.add(college2);
university.print();
college1.print();
}
}