组合模式
组合模式:又被称为部分整体模式,他创建了对象组得树形结构,将对象组合合成树状结构以表示“整体-部分”得层次关系。
组合模式UML图
组合模式简单实现
OrganizationComponent类:
public abstract class OrganizationComponent {
private String name;
private String des;
public OrganizationComponent(String name, String des) {
this.name = name;
this.des = des;
}
protected void add(OrganizationComponent organizationComponent){
throw new UnsupportedOperationException();
}
protected void remove(OrganizationComponent organizationComponent){
throw new UnsupportedOperationException();
}
public abstract 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;
}
}
University类:
public class University extends OrganizationComponent {
List<OrganizationComponent> organizationComponents= new ArrayList<OrganizationComponent>();
public University(String name, String des) {
super(name, des);
}
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getDes() {
return super.getDes();
}
@Override
public void setDes(String des) {
super.setDes(des);
}
public void print() {
System.out.println(this.getName());
for (OrganizationComponent organizationComponent:organizationComponents){
organizationComponent.print();
}
}
}
College类:
public class College extends OrganizationComponent {
List<OrganizationComponent> organizationComponents= new ArrayList<OrganizationComponent>();
public College(String name, String des) {
super(name, des);
}
@Override
protected void add(OrganizationComponent organizationComponent) {
organizationComponents.add(organizationComponent);
}
@Override
protected void remove(OrganizationComponent organizationComponent) {
organizationComponents.remove(organizationComponent);
}
@Override
public String getDes() {
return super.getDes();
}
@Override
public void setDes(String des) {
super.setDes(des);
}
public void print() {
System.out.println(this.getName());
for (OrganizationComponent organizationComponent:organizationComponents){
organizationComponent.print();
}
}
}
Department类:
public class Department extends OrganizationComponent {
public Department(String name, String des) {
super(name, des);
}
@Override
public String getDes() {
return super.getDes();
}
@Override
public void setDes(String des) {
super.setDes(des);
}
public void print() {
System.out.println(this.getName());
}
}
测试类:
@org.junit.Test
public void test(){
University university = new University("武工院","垃圾");
College college1 = new College("外院","妹子多");
College college2 = new College("信工","傻逼多");
Department department = new Department("移动","流弊");
college2.add(department);
university.add(college1);
university.add(college2);
university.print();
//武工院
//外院
//信工
//移动
}
总结
又较强的扩展性,当我们更改组合对象时,我们只需要调整内部的层次关系,客户端端不需要做调整。简化客户端的操作。