组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
案例分析:
一个公司有分公司也有部门,分公司下面也有公司和部门。
public abstract class GongSi {
protected String name;
public GongSi(String name)
{
this.name=name;
}
public void ShowName()
{
System.out.println(name);
}
public abstract void add(GongSi gongSi);
public abstract void remove(GongSi gongSi);
public abstract void iterate();
}
public class BuMen extends GongSi{
public BuMen(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void add(GongSi gongSi) {
// TODO Auto-generated method stub
}
@Override
public void remove(GongSi gongSi) {
// TODO Auto-generated method stub
}
@Override
public void iterate() {
// TODO Auto-generated method stub
System.out.println(name);
}
}
public class FenGongSi extends GongSi{
private ArrayList<GongSi> list=new ArrayList<GongSi>();
public FenGongSi(String name) {
super(name);
// TODO Auto-generated constructor stub
}
@Override
public void add(GongSi zongGongSi) {
// TODO Auto-generated method stub
list.add(zongGongSi);
}
@Override
public void remove(GongSi gongSi) {
// TODO Auto-generated method stub
list.remove(gongSi);
}
@Override
public void iterate() {
// TODO Auto-generated method stub
System.out.println(name);
for (GongSi c : list) {
c.iterate();
}
}
}
public static void main(String[] args) {
FenGongSi fenGongSi=new FenGongSi("总公司");
fenGongSi.add(new BuMen("总公司下部门1"));
fenGongSi.add(new BuMen("总公司下部门2"));
FenGongSi fengongsi1=new FenGongSi("总公司下分公司1");
fenGongSi.add(fengongsi1);
FenGongSi fengongsi2=new FenGongSi("总公司下分公司2");
fenGongSi.add(fengongsi2);
FenGongSi fengongsi11=new FenGongSi("总公司下分公司1分部门1");
fengongsi1.add(fengongsi11);
FenGongSi fengongsi12=new FenGongSi("总公司下分公司1分部门2");
fengongsi1.add(fengongsi12);
FenGongSi fengongsi21=new FenGongSi("总公司下分公司2分部门1");
fengongsi2.add(fengongsi21);
FenGongSi fengongsi22=new FenGongSi("总公司下分公司2分部门2");
fengongsi2.add(fengongsi22);
fenGongSi.iterate();
}
运行结果:
总公司
总公司下部门1
总公司下部门2
总公司下分公司1
总公司下分公司1分部门1
总公司下分公司1分部门2
总公司下分公司2
总公司下分公司2分部门1
总公司下分公司2分部门2