组合模式就是把部分和整体的关系用树形结构表现出来,以实现“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
1.Component对象: 是组合中的对象接口,是所有类共有的接口。是表示一个整体。
2.Leaf对象: 整体中的部分,没有下一级。
3.Composite对象: 用来存储子部件,在Component接口中实现与部分有关操作。
//抽象类-公司对象
public abstract class Firm {
private String firmName;
public Firm(String firmName) {
this.firmName = firmName;
}
public String getFirmName() {
return firmName;
}
public void setFirmName(String firmName) {
this.firmName = firmName;
}
protected abstract void append(Firm firm);
protected abstract void remove(Firm firm);
protected abstract void show(int level);
}
//分公司对象
public class BranchFirm extends Firm {
private List<Firm> firmList;
public BranchFirm(String firmName) {
super(firmName);
firmList = new ArrayList<Firm>();
}
@Override
protected void append(Firm firm) {
firmList.add(firm);
}
@Override
protected void remove(Firm firm) {
firmList.remove(firm);
}
@Override
protected void show(int level) {
StringBuilder sb = new StringBuilder("");
for (int i=0;i<level;i++) {
sb.append("*");
}
System.out.println(new String(sb) + this.getFirmName());
for(Firm f : firmList) {
f.show(level + 2);
}
}
}
//公司市场部
public class MarketDepartment extends Firm {
public MarketDepartment(String firmName) {
super(firmName);
}
@Override
protected void append(Firm firm) {
// TODO Auto-generated method stub
}
@Override
protected void remove(Firm firm) {
// TODO Auto-generated method stub
}
@Override
protected void show(int level) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<level;i++) {
sb.append("*");
}
System.out.println(new String(sb) + this.getFirmName());
}
}
//公司技术部
public class MinTeachDepartment extends Firm {
public MinTeachDepartment(String firmName) {
super(firmName);
}
@Override
protected void append(Firm firm) {
// TODO Auto-generated method stub
}
@Override
protected void remove(Firm firm) {
// TODO Auto-generated method stub
}
@Override
protected void show(int level) {
StringBuilder sb = new StringBuilder("");
for (int i=0;i<level;i++) {
sb.append("*");
}
System.out.println(new String(sb) + this.getFirmName());
}
}