组合模式: 又叫部分整体模式, 它创建了对象组的树形结构,将对象组合成树状结构以表示"整体-部分"的层次关系。
JDK中的HashMap就使用了组合模式
public abstract class OrganizationComponent {
private String name; // 名字
private String desc; // 说明
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public OrganizationComponent(String name,String desc){
super();
this.name = name;
this.desc = desc;
}
protected void add(OrganizationComponent organizationComponent){
// 默认实现
throw new UnsupportedOperationException();
}
protected void remove(OrganizationComponent organizationComponent){
// 默认实现
throw new UnsupportedOperationException();
}
protected abstract void print();
}
import java.util.ArrayList;
import java.util.List;
public class University extends OrganizationComponent{
List<OrganizationComponent> organizationComponents = new ArrayList<OrganizationComponent>();
public University(String name, String desc) {
super(name, desc);
}
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getDesc() {
return super.getDesc();
}
@Override
protected void print() {
System.out.println("--------"+getName()+"----------");
for (OrganizationComponent organizationComponent : organizationComponents) {
organizationComponent.print();
System.out.println();
}
}
}
import java.util.ArrayList;
import java.util.List;
public class College extends OrganizationComponent{
// 存放department
List<OrganizationComponent> organizationComponents = new ArrayList<OrganizationComponent>();
public College(String name, String desc) {
super(name, desc);
}
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getDesc() {
return super.getDesc();
}
@Override
protected void print() {
System.out.println(" -------"+getName()+"--------- ");
for (OrganizationComponent organizationComponent : organizationComponents) {
organizationComponent.print();
}
}
}
public class Department extends OrganizationComponent{
public Department(String name, String desc) {
super(name, desc);
}
@Override
public String getDesc() {
return super.getDesc();
}
@Override
protected void print() {
System.out.println(" ------"+getName()+"------- ");
}
}
public class Client {
public static void main(String[] args){
University university = new University("梁山大学", "成立于宋朝");
College college1 = new College("兵部", "林冲部长");
Department department1 = new Department("禁军系", "八十万士兵");
Department department2 = new Department("后勤系", "厨师做的一手好菜");
College college2 = new College("通信部", "戴宗部长");
Department department3 = new Department("跑腿系", "十万士兵");
university.add(college1);
college1.add(department1);
college1.add(department2);
university.add(college2);
college2.add(department3);
university.print();
}
}